admin 管理员组

文章数量: 887007

【数电实验】汽车流动转向灯电路设计

要求:用 Verilog HDL 以层次化的设计方法,结合实验 1(需修改部分代码), 使用下文计数器模块代码“Code-1 7 进制计数器”,将计数器输出 Q 与译码器输 入 x 相连,译码器输出 codeout 锁定到实验箱的 LED 上,设计一个彩灯控制器。 LED 在控制电路的驱动下,按图 2 所示规律点亮/熄灭(●表示亮灯,○表示灭 灯)。对整体电路进行仿真,应当能够看到 en 为高电平时计数器的输出值自动增 加,相应地译码器的输出依次变化,并循环。

真值表: 

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

11

1

0

1

1

0

0

0

111

1

1

0

0

0

0

1111

1

1

0

1

0

11111

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)
beginif(en)begin  if (count == 3'b110) begincount <= 3'b000; end// 计数器达到6时清零else begincount <= count + 1;end // 否则加一  非阻塞赋值,后面的语句可以接着进行end
endassign Q = (en)?count:3'b000; //组合逻辑 输出计数器值 阻塞赋值后面的不能进行endmodule
module comb_4(X,seg,codeout);input [2:0]X;output seg;output reg [5:0]codeout;
always@(*) begincase(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 

仿真波形图:

RTL图:

本文标签: 数电实验汽车流动转向灯电路设计