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 [...]
Welcome to 七十二松 (72pines). This is your first post. Edit or delete it, then start blogging!