verilog数组的定义、转换和加法器的实现

这篇具有很好参考价值的文章主要介绍了verilog数组的定义、转换和加法器的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、verilog中数组

1、一维数组

看了别人的博客有的人也称reg [31:0] add0[0:12]这样的数组为二维数组,其实中二维数组不是真正意义上的数组,而是由多个寄存器组成的ROM或者RAM。我觉得这样理解好记一点:这个是一维数组,一共有0到12共13组数据,每组数据的宽度是0到31一共32个位宽。

reg [31:0] add0[0:12];//前面[31:0]表示位宽,add0代表存储的名字,[0:12]代表0到12共13个组
reg [31:0] add1[0:6];//前面[31:0]表示位宽,add1代表存储的名字,[0:6]代表0到6共7个组
reg [31:0] add2[0:3];
reg [31:0] add3[0:1];

assign data=add0[6][31:24];//调用第7组的高8位数据 

verilog数组的定义、转换和加法器的实现

2、二维数组

reg [23:0] window_mul_result[4:0][4:0];//reg [23:0] window_mul_result[0:4][0:4]效果好像是一样的

二、加法实现的两种方法:

1. 方法一

reg [23:0] window_mul_result[4:0][4:0];
wire [31:0] window_sum;
//=====================方法1 此方法消耗较大的lut===================================================
assign window_sum=window_mul_result[0][0]+window_mul_result[0][1]+window_mul_result[0][2]+window_mul_result[0][3]+window_mul_result[0][4]+
                  window_mul_result[1][0]+window_mul_result[1][1]+window_mul_result[1][2]+window_mul_result[1][3]+window_mul_result[1][4]+
                  window_mul_result[2][0]+window_mul_result[2][1]+window_mul_result[2][2]+window_mul_result[2][3]+window_mul_result[2][4]+
                  window_mul_result[3][0]+window_mul_result[3][1]+window_mul_result[3][2]+window_mul_result[3][3]+window_mul_result[3][4]+
                  window_mul_result[4][0]+window_mul_result[4][1]+window_mul_result[4][2]+window_mul_result[4][3]+window_mul_result[4][4];

优势:简单易于编程

2、方法二

//==============================方法2 采用加法树add tree=========================================
reg [23:0] window_mul_result[4:0][4:0];
wire [31:0] window_sum;
reg [31:0] add0[0:12];
reg [31:0] add1[0:6];
reg [31:0] add2[0:3];
reg [31:0] add3[0:1];
wire [16-1:0] window_mul_result_4tree[0:24];//这个定于的作用是将reg [23:0] window_mul_result[4:0][4:0]二维数组变为一维数组,
											//每一组数据的位宽由24位缩小为16位。二维变为一维数组的好处就是循环的时候好遍历索引

always@(posedge clk)begin
    //============add0================
    for(i=0;i<12;i=i+1)begin
        add0[i]<=window_mul_result_4tree[i*2]+window_mul_result_4tree[i*2+1];
    end
        add0[12]<=window_mul_result_4tree[24]+0;
    //==============add1==================
    for(i=0;i<6;i=i+1)begin
        add1[i]<=add0[i*2]+add0[i*2+1];
    end
        add1[6]<=add0[12]+0;
     //==============add2==================
    for(i=0;i<3;i=i+1)begin
        add2[i]<=add1[i*2]+add1[i*2+1];
    end
        add2[3]<=add1[6]+0;
       //==============add3==================
    for(i=0;i<2;i=i+1)begin
        add3[i]<=add2[i*2]+add2[i*2+1];
    end
end
assign window_sum=add3[0]+add3[1];

优势:节约资源,但是会晚4个时钟出结果
verilog数组的定义、转换和加法器的实现

verilog数组的定义、转换和加法器的实现文章来源地址https://www.toymoban.com/news/detail-507562.html

到了这里,关于verilog数组的定义、转换和加法器的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】Verilog:二进制并行加法器 | 超前进位 | 实现 4 位二进制并行加法器和减法器 | MSI/LSI 运算电路

    0x00 并行加法器和减法器 如果我们要对 4 位加法器和减法器进行关于二进制并行运算功能,可以通过将加法器和减法器以 N 个并行连接的方式,创建一个执行 N 位加法和减法运算的电路。 4 位二进制并行加法器 4 位二进制并行减法器

    2024年02月05日
    浏览(55)
  • 【FPGA】Verilog:BCD 加法器的实现 | BCD 运算 | Single-level 16 bit 超前进位加法器 | 2-level 16-bit 超前进位加法器

    0x00 BCD 运算 在 BCD 中,使用4位值作为操作数,但由于只表示 0 到 9 的数字,因此只使用 0000 到 1001 的二进制数,而不使用 1010 到 1111 的二进制数(don\\\'t care)。 因此,不能使用常规的 2\\\'complement 运算来计算,需要额外的处理:如果 4 位二进制数的运算结果在 1010 到 1111 的范围

    2024年02月05日
    浏览(45)
  • FPGA学习笔记(1):使用Verilog实现常见的加法器

    本文使用VerilogHDL实现一些简单的加法器,本人水平有限,希望大佬能够多指证 Quartus Prime(18.0) Modelsim 半加器可以用于计算两个单比特二进制数的和,C表征进位输出,S表述计算的结果。 半加器的真值表 化简以后的逻辑表达式可以表达为: s = a’b+ab’ c = ab Verilog 代码块 全加

    2024年02月09日
    浏览(43)
  • Verilog 加法器/减法器

    目录 1位加法器 8位加法器 8位补码加减法器  32位补码加减法器       

    2024年02月11日
    浏览(42)
  • 【verilog】6位二进制数加法器

    1:掌握无符号二进制数加法器的设计方法。 2:掌握使用Modelsim对verilog程序进行仿真和验证的方法。 二进制加法器由全加器构成,全加器功能和电路图如下图所示。 全加器对两个1位二进制数和1位来自低位的进位做加法运算,产生1位和和1位向更高位的进位。图中(a)是全加

    2024年02月06日
    浏览(45)
  • verilog全加器和四位加法器

    半加器: 保存为half_addr.bsf之后,可以在该项目中添加半加器 全加器: 通过RTL-Viewer查看半加器和全加器 添加全加器到项目 在process里面先后执行start fitter 和start time analyzer 生成testbench模板 修改testbench文件: 添加到项目 注意在联合modelsim时让generate functinal simulation netlist值为

    2024年02月07日
    浏览(46)
  • Verilog数字系统设计——带进位的8位加法器

    试分别使用门级原语和always 语句设计带进位的8位加法器,要求编制测试模块对实现的逻辑功能进行完整的测试; 使用门级原语设计时注意先在草稿上做出该加法器的门级设计; 如有余力可以进一步使用门级原语设计出带超前进位链的8位加法器(期末有加分); 实验提交

    2024年02月15日
    浏览(48)
  • [FPGA]用Verilog写一个简单三位二进制加法器和减法器

    加法器和减法器是数字电路中的基本组件,它们可以对二进制数进行算术运算。加法器可以将两个或多个二进制数相加,得到一个和和一个进位。减法器可以将两个二进制数相减,得到一个差和一个借位。加法器和减法器可以用来实现更高级的运算,例如乘法、除法、移位等

    2024年02月04日
    浏览(42)
  • Verilog设计4位CLA加法器电路,并仿真测试

    使用Quartus+modelsim完成本次设计 对于超前进位加法器 (CLA)加法器,它不同于普通加法器。如果对于两个1024位的数字进行相加,那么普通的串行加法器因为只有算出 C x C_{x} C x ​ 才能继续计算 C x + 1 C_{x+1} C x + 1 ​ ,这会导致整体的效率非常低。如果使用超前进位加法器,那

    2024年02月04日
    浏览(53)
  • Verilog快速入门(8)—— 4bit超前进位加法器电路

    (1) 四选一多路器 (2)异步复位的串联T触发器 (3)奇偶校验 (4)移位运算与乘法 (5)位拆分与运算 (6)使用子模块实现三输入数的大小比较 (7)4位数值比较器电路 (8)4bit超前进位加法器电路 (9)优先编码器电路① (10)用优先编码器①实现键盘编码电路 (11)8线-3线优先编码器 (12)使用8线-3线

    2024年02月04日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包