牛客VL13 优先编码器电路

文章介绍了如何根据真值表设计优先编码器的逻辑,提供了用if语句和casez语句两种方式编写Verilog代码来实现。if语句版本详细列举了所有可能的状态,而casez语句利用通配符简化了匹配条件。这两种方法都能综合出硬件电路。
摘要由CSDN通过智能技术生成

 根据所提供的真值表进行分析,可以知道有效状态为6~15,因此,根据优先编码器的逻辑可以得出最基本的代码逻辑,如下:

always@(I_n) begin
    if(I_n == 9'b111111111) Y_n = 4'b1111;
    if(I_n[8]==0) Y_n =4'b0110;
    if(I_n[7]==0&&I_n[8]!=0) Y_n =4'b0111;
    if(I_n[6]==0&&I_n[7]!=0&&I_n[8]!=0) Y_n =4'b1000;
    if(I_n[5]==0&&I_n[6]!=0&&I_n[7]!=0&&I_n[8]!=0) Y_n =4'b1001;
    if(I_n[4]==0&&I_n[5]!=0&&I_n[6]!=0&&I_n[7]!=0&&I_n[8]!=0) Y_n =4'b1010;
    if(I_n[3]==0&&I_n[4]!=0&&I_n[5]!=0&&I_n[6]!=0&&I_n[7]!=0&&I_n[8]!=0) Y_n =4'b1011;
    if(I_n[2]==0&&I_n[3]!=0&&I_n[4]!=0&&I_n[5]!=0&&I_n[6]!=0&&I_n[7]!=0&&I_n[8]!=0) Y_n =4'b1100;
    if(I_n[1]==0&&I_n[2]!=0&&I_n[3]!=0&&I_n[4]!=0&&I_n[5]!=0&&I_n[6]!=0&&I_n[7]!=0&&I_n[8]!=0) Y_n =4'b1101;
    if(I_n[0]==0&&I_n[1]!=0&&I_n[2]!=0&&I_n[3]!=0&&I_n[4]!=0&&I_n[5]!=0&&I_n[6]!=0&&I_n[7]!=0&&I_n[8]!=0) Y_n =4'b1110;
 end

也可以使用case语句进行赋值,这个就使用了通配符,更加推荐(简单地说,三者都是可以综合的。case进行全等匹配,casez忽略?z对应的位进行匹配,casex忽略x?z对应的位进行匹配。

 always@(*) begin
        casez (I_n)
            9'b1_1111_1111: Y_n = 4'b1111;
            9'b0_????_????: Y_n = 4'b0110;
            9'b1_0???_????: Y_n = 4'b0111;
            9'b1_10??_????: Y_n = 4'b1000;
            9'b1_110?_????: Y_n = 4'b1001;
            9'b1_1110_????: Y_n = 4'b1010;
            9'b1_1111_0???: Y_n = 4'b1011;
            9'b1_1111_10??: Y_n = 4'b1100;
            9'b1_1111_110?: Y_n = 4'b1101;
            9'b1_1111_1110: Y_n = 4'b1110;
            default: Y_n = 4'b0000;
        endcase
    end

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值