module D_latch(
D, //输入选择地址由开关决定,0:按下,1:未按下
E, //输入选择地址由开关决定,0:按下,1:未按下
Q //输出,0:点亮,1:熄灭
);
input D; //D锁存器输入
input E; //D锁存器输入
output Q; //D锁存器输出
reg Q; //寄存器说明
always @(D or E) //一旦D或则E变化就执行
begin
if(E) //当E=1的时候D才可以赋值给Q,其它状态不执行
Q <= D;
else;
end
endmodule
module my_encode(
I, //输入由开关决定,0:按下,1:未按下
Y //输出,0:点亮,1:熄灭
);
input [3:0] I; //输入4位
output [1:0] Y; //输出2位
reg [1:0] Y; //always中需要寄存器定义
always @(I) //一旦输入I变化就执行
begin
case(I) //用case语句来描述
4′b0001: Y = 2′b00; //I[0]为1的时候编码为0
4′b0010: Y = 2′b01; //I[1]为1的时候编码为1
4′b0100: Y = 2′b10; //I[2]为1的时候编码为2
4′b1000: Y = 2′b11; //I[3]为1的时候编码为3
default: Y = 2′b00; //其它方式为0,当多输入为1的时候就是这种情况
endcase
end
endmodule
module my_encode1(
I, //输入由开关决定,0:按下,1:未按下
Y //输入由开关决定,0:按下,1:未按下
);
input [3:0] I; //输入
output [1:0] Y; //输出
reg [1:0] Y; //输出
always @(I) //一旦I变化就执行
begin
casex(I) //优先编码器需要用casex来描述
4′bxxx1: Y = 2′b00; //I[0]为1的时候编码为0
4′bxx1x: Y = 2′b01; //I[1]为1的时候编码为1
4′bx1xx: Y = 2′b10; //I[2]为1的时候编码为2
4′b1xxx: Y = 2′b11; //I[3]为1的时候编码为3
default: Y = 2′b00; //其它状态的处理
endcase
end
endmodule
module state_machine(
clk, //48M
reset, //
sel, //01
Q //01
);
input clk; //
input reset; //
input sel;
output [3:0] Q; //
reg [3:0] Q; //
wire clk_out; //1S
reg [2:0] sts;
parameter st1 = 2′b00, //1
st2 = 2′b01, //2
st3 = 2′b10, //3
st4 = 2′b11; //4
/* */
always @(posedge clk_out or negedge reset)
begin
if(!reset)
begin
Q <= 4′b0000; //0
sts <= st1;
end
else
case(sts)
st1: //1
begin
Q [...]
| 一 | 二 | 三 | 四 | 五 | 六 | 日 |
|---|---|---|---|---|---|---|
| « 十 | ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | ||||