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

要求:用 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)
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 

仿真波形图:

RTL图:

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值