Verilog中的case(1‘b1)

在用Verilog设计RTL代码时用到case(1'b1)的时候不多,因此遇见时就会很迷惑。

下面转载一个链接,里面有解说,但需要说的是“一次输入只有一个1”这点可能不太准确,因为优先级编码更注重的是优先级,如链接中的第一张图中的优先级编码表和下面的仿真图。

秋招手撕代码:verilog实现常规8-3编码器和优先级8-3编码器_IC媛的博客-CSDN博客_8-3优先编码器verilog

上图中,简单的写了一个三输入的编码器,d0是具有最高优先级的,其次是d1,再次是d2。只要d0为1‘b0时,输出q=1;再次是d1为1’b0时,输出q=2;最后才是d2为1'b0时,输出q=3;当d0,d1,d2都不为1'b0时,输出q=0。

注:如果被转载的博主不愿意该博文被转载,告知后会及时删除转载链接

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
module digital_show( input wire [1:0]SW, input wire CLOCK_50, output wire [6:0]HEX0,HEX1,HEX2,HEX3 ); wire q; part2 a1(.clk(CLOCK_50),.max_tick(q),.enable(SW[0])); part1 a2(.clk(CLOCK_50),.reset(SW[1]),.en(q),.hex3(HEX3),.hex2(HEX2),.hex1(HEX1),.hex0(HEX0)); endmodule module part1( input wire clk ,reset,en, output reg [6:0]hex0,hex1,hex2,hex3 ); localparam s0=4'b0000, s1=4'b0001, s2=4'b0010, s3=4'b0011, s4=4'b0100, s5=4'b0101, s6=4'b0110, s7=4'b0111, s8=4'b1000, s9=4'b1001; reg [3:0]r_reg,r_next; always@(posedge clk,posedge reset) begin if(reset) r_reg<=0; else r_reg<=r_next; end always@* begin case(r_reg) s0: if(en) r_next=s1; else r_next=s0; s1: if(en) r_next=s2; else r_next=s1; s2: if(en) r_next=s3; else r_next=s2; s3: if(en) r_next=s4; else r_next=s3; s4: if(en) r_next=s5; else r_next=s4; s5: if(en) r_next=s6; else r_next=s5; s6: if(en) r_next=s7; else r_next=s6; s7: if(en) r_next=s8; else r_next=s7; s8: if(en) r_next=s9; else r_next=s8; s9: if(en) r_next=s0; else r_next=s9; default: r_next=s0; endcase end always@* begin case(r_reg) s0: begin hex3=7'b1000000; hex2=7'b1111001; hex1=7'b0100100; hex0=7'b0110000; end s1: begin hex3=7'b1111001; hex2=7'b0100100; hex1=7'b0110000; hex0=7'b0011001; end s2: begin hex3=7'b0100100; hex2=7'b0110000; hex1=7'b0011001; hex0=7'b0010010; end s3: begin hex3=7'b0110000; hex2=7'b0011001; hex1=7'b0010010; hex0=7'b0000010; end s4: begin hex3=7'b0011001; hex2=7'b0010010; hex1=7'b0000010; hex0=7'b1111000; end s5: begin hex3=7'b0010010; hex2=7'b0000010; hex1=7'b1111000; hex0=7'b0000000; end s6: begin hex3=7'b0000010; hex2=7'b1111000; hex1=7'b0000000; hex0=7'b0010000; end s7: begin hex3=7'b1111000; hex2=7'b0000000; hex1=7'b0010000; hex0=7'b1000000; end s8: begin hex3=7'b0000000; hex2=7'b0010000; hex1=7'b1000000; hex0=7'b1111001; end s9: begin hex3=7'b0010000; hex2=7'b1000000; hex1=7'b1111001; hex0=7'b0100100; end endcase end endmodule module part2 #(parameter n=26) (input wire clk,reset,enable, output wire max_tick ); reg [n-1:0]r_reg; wire [n-1:0]r_next; always@(posedge clk,posedge reset) begin if(reset) r_reg=0; else r_reg=r_next; end assign r_next=(enable)?((r_reg==50000000)?1'b0:r_reg+1'b1):r_reg; assign max_tick=(r_reg==50000000)?1'b1:1'b0; endmodule

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值