zoukankan      html  css  js  c++  java
  • verilog 常见单元描述

    半加器:

    //行为级建模
    module half_adder2(a, b, sum, c_out);
        input a, b;
        output sum, c_out;
        assign {c_out, sum} = a + b;
    endmodule
    // 结构级建模
    module half_adder(a, b, sum, c_out);
        input a, b;
        output sum, c_out;
        xor (sum, a, b);
        and (c_out, a, b);
    endmodule

     

    进位选择加法器:

    多路复用器:

    //行为模型
    module Mux_4_32_case(
        output        [31:0]        mux_out,
        input         [31:0]        data_3, data_2, data_1, data_0,
                      [1:0]         select,
        input                       enabel
    );
        reg           [31:0]        mux_int;
        assign mux_out = enable ? mux_int : 32b'z;
        always @ (data_3, data_2, data_1, data_0, select)
            case (select)
                0:                   mux_int = data_0;
                1:                   mux_int = data_1;
                2:                   mux_int = data_2;
                3:                   mux_int = data_3;
                default:             mux_int = 32b'x;    //当select包含z or x时的状态,不加default vivado综合出来的电路图没有区别,但是不知道在tb上会不会出问题
            endcase 
    endmodule

    //使用if条件语句行为级建模
    module
    Mux_4_32_if( output [31:0] mux_out, input [31:0] data_3, data_2, data_1, data_0, input [1:0] select, input enable ); reg [31:0] mux_int; assign mux_out = enable ? mux_int : 32'bz; always @(data_3, data_2, data_1, data_0, select) if(select == 2'b00) mux_int = data_0; else if(select == 2'b01) mux_int = data_1; else if(select == 2'b10) mux_int = data_2; else if(select == 2'b11) mux_int = data_3; else mux_int = 32'bx; endmodule

    module Mux_4_32_CA(
        output      [31:0]      mux_out,
        input       [31:0]      data_3, data_2, data_1, data_0,
        input       [1:0]       select,
        input                   enable
    );
        wire        [31:0]      mux_int;
        assign      mux_out = enable ? mux_int : 32'bz;
        assign      mux_int = (select==0) ? data_0:
                                 (select==1) ? data_1:
                                    (select==2) ? data_2:
                                       (select==3) ? data_3: 32'bx;
    endmodule

     编码器

    //case 优先编码器
    module priority_case(
        output  reg [2:0]   Code,
        output              valid_data,
        input       [7:0]   Data    
        );
       assign  valid_data = |Data;  //“reduction or" operator
    always @(Data) casex (Data) 8'b1xxxxxxx : Code = 7; 8'b01xxxxxx : Code = 6; 8'b001xxxxx : Code = 5; 8'b0001xxxx : Code = 4; 8'b00001xxx : Code = 3; 8'b000001xx : Code = 2; 8'b0000001x : Code = 1; 8'b00000001 : Code = 0; default : Code = 3'bx; endcase endmodul

     
  • 相关阅读:
    「SDOI2018」物理实验
    「SDOI 2018」战略游戏
    「CodeChef Dec13 REALSET」 Petya and Sequence 循环卷积
    关于微信卡券投放code接口报错原因
    composer update maatwebsite/excel 之后 在linux机子上出现500解决方案
    开启mysql 服务【window】
    thinkphp在linux上部署环境(500情况)
    如何推广微信小程序到企业微信
    linux 阿里云远程连接mysql
    php7以上 不支持mcrypt_module_open方法问题【微信开放平台】
  • 原文地址:https://www.cnblogs.com/lizhiqing/p/11912063.html
Copyright © 2011-2022 走看看