要求:用 Verilog HDL 以层次化的设计方法,结合实验 1(需修改部分代码), 使用下文计数器模块代码“Code-1 7 进制计数器”,将计数器输出 Q 与译码器输 入 x 相连,译码器输出 codeout 锁定到实验箱的 LED 上,设计一个彩灯控制器。 LED 在控制电路的驱动下,按图 2 所示规律点亮/熄灭(●表示亮灯,○表示灭 灯)。对整体电路进行仿真,应当能够看到 en 为高电平时计数器的输出值自动增 加,相应地译码器的输出依次变化,并循环。![](https://i-blog.csdnimg.cn/blog_migrate/d4d3388494a4ee6baad898cc4260c9cd.png)
真值表:
en | X0 | X1 | X2 | Codeout0 | Codeout1 | Codeout2 | Codeout3 | Codeout4 | Codeout5 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 |
1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
module dingcengwenjian(clk,en,Q,codeout);//顶层文件 包含两个模块
input clk,en;
output [2:0]Q;
output [5:0]codeout;
comb_3(clk,en,Q);
comb_4(Q,seg,codeout);
endmodule
module comb_3(clk,en,Q[2:0]);//这里一定要写分号!!!!
input clk,en; // 时钟信号输入
output [3:0] Q;// 计数器输出
reg [2:0] count; // 计数器寄存器
reg ret;
always @(posedge clk)
begin
if(en)begin
if (count == 3'b110) begin
count <= 3'b000; end// 计数器达到6时清零
else begin
count <= count + 1;end // 否则加一 非阻塞赋值,后面的语句可以接着进行
end
end
assign Q = (en)?count:3'b000; //组合逻辑 输出计数器值 阻塞赋值后面的不能进行
endmodule
module comb_4(X,seg,codeout);
input [2:0]X;
output seg;
output reg [5:0]codeout;
always@(*)
begin
case(X)//这里不需要冒号
3'b000:codeout<=6'b000000;
3'b001:codeout<=6'b000001;//这里需要非阻塞 左边是高位右边是低位
3'b010:codeout<=6'b000011;
3'b011:codeout<=6'b000111;
3'b100:codeout<=6'b001111;
3'b101:codeout<=6'b011111;
3'b110:codeout<=6'b111111;
default:codeout=6'bx;
endcase
end
endmodule