HDLBits练习 Circuits;Combinational Logic;Multiplexers

always 以及 case ,casez 用法在Procedures
三目运算符 用法在More Verilog Features

1. +:与 -:的基本语法:
[起始地址+:位宽] = [起始地址+位宽-1: 起始地址 ] (起始地址加上规定位宽的整个片段)
[结束地址 -:位宽] = [ 结束地址 :起始地址-位宽+1] (结束地址减去规定位宽的整个片段)
例:

in [7 +: 8] = in [14 : 7]//起始地址为7,位宽为8
in [7 -: 8] = in [0  : 7]//结束地址为7,位宽为8 

1.2-to-1 multiplexer

例1:
在这里插入图片描述
解:

   module top_module
   ( 
    input a, b, sel,
    output out
    );     
    always@(*)
        begin
            case(sel)
            1'b0 : out = a;
            1'b1 : out = b;
            endcase
        end
endmodule

使用三目运算符好像简单很多

   module top_module
   ( 
    input a, b, sel,
    output out
    );  
    assign out = (sel) ? b : a;
    endmodule

2.2-to-1 bus multiplexer

例1:
在这里插入图片描述

解:
除了位宽与上题完全相同

 module top_module( 
   input [99:0] a, b,
   input sel,
   output [99:0] out );
   
   assign out = (sel) ? b : a;
endmodule

3. 9-to-1 multiplexer

例1:
在这里插入图片描述
解:
按照题目来就行

module top_module( 
 input [15:0] a, b, c, d, e, f, g, h, i,
 input [3:0] sel,
 output [15:0] out );
 always@(*)
     begin
         case(sel)
             4'b0000 : out = a;
             4'b0001 : out = b;
             4'b0010 : out = c;
             4'b0011 : out = d;
             4'b0100 : out = e;
             4'b0101 : out = f;
             4'b0110 : out = g;
             4'b0111 : out = h;
             4'b1000 : out = i;
             default : out = 16'b1111111111111111;
         endcase
     end
endmodule

4. 256-to-1 multiplexer

例1:
在这里插入图片描述
8位二进制选择256个数,简单思路还是选择case,但由于 2 8 = 256 2^8 = 256 28=256所以直接令两者相等,即使不等也可以同过移位拼接等方法找到联系
解:

module top_module( 
   input [255:0] in,
   input [7:0] sel,
   output out );
   assign out = in[sel];
endmodule

5. 256-to-1 4-bit multiplexer

例1:
在这里插入图片描述
与上题大致相同但是被选择的位宽由一位变成了四位,sel = 0 , out = [3:0] ···
解:

sel012···253254255
out[3:0][7:4][11:8]···[1015:1012][1019:1016][1023:1020]
module top_module( 
 input [1023:0] in,
 input [7:0] sel,
 output [3:0] out );
 assign out = in[4 * sel + 3 -: 4 ];//assign out = in[4*sel +: 4]  两种分别对应从高位开始和从低位开始
endmodule
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值