在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: frankytm1984

[原创] Verilog for循环仿真问题

[复制链接]
发表于 2010-1-28 16:29:04 | 显示全部楼层
楼主,你这种写法是不行的,我给你写了一个带流水线的8×8乘法器的设计实例,包里带有测试程序和仿真波形,供参考
mux.jpg

mux.tar

660 KB, 下载次数: 27 , 下载积分: 资产 -2 信元, 下载支出 2 信元

 楼主| 发表于 2010-1-28 17:09:16 | 显示全部楼层
感谢各位大侠的解答。

小弟感激不尽!
发表于 2010-1-29 09:36:51 | 显示全部楼层
声明变量最好还是size-1:0  习惯了就好,另外现在的综合器大多是支持for语句的,位数不是很大,频率不要求很高的话直接乘就OK了。initial语句是不能综合的,
之前代码里面组合逻辑要写到always模块,没敏感变量硬件认不到的,综合不出逻辑的


module mux(result,opa,opb);
   parameter  size = 8, longsize = 16;
   input [size-1:0] opa;
   input [size-1:0] opb;
   output[longsize-1:0] result;
   
    reg[size-1:0]        opa, opb;
    reg[longsize-1:0] result;
    integer bindex;
    always@(*) begin
       result = 0;
       for( bindex=0; bindex<size; bindex=bindex+1 ) begin
            if(opb[bindex]) begin
                result = result + (opa<<(bindex-1));
            end
            else begin
                result = result;
            end
       end
    end

endmodule
 楼主| 发表于 2010-1-29 11:50:34 | 显示全部楼层
再次强烈感谢各位大侠的热心解答!!!!!!!!!!!!!!!!!!!!!!!!
发表于 2010-1-29 14:16:31 | 显示全部楼层
用for循环改写的8x8乘法器:
module mux(clk,reset,result,opa,opb);
   parameter  size = 8;
   parameter  longsize = 16;
   input clk,reset;
   input [size-1:0] opa;
   input [size-1:0] opb;
   output [longsize-1:0] result;
   reg [size-1:0] result_m [size-1:0];
   reg [longsize-1:0] result;
  integer bindex,i;
    always @ (negedge clk) begin
       if (~reset) begin
          for(i=0;i<size;i=i+1) begin
              result_m[i] <= 8'h0;
          end
       end
       else begin
       for( bindex=0; bindex<size; bindex=bindex+1 ) begin
            if(opb[bindex]) begin
                result_m[bindex] <=opa;
            end
            else begin
                result_m[bindex] <=8'h0;
            end
       end
       end
    end
    always @ (negedge clk) begin
      if (~reset) result<=8'h0;
      else result<=result_m[0]+{result_m[1],1'b0}+{result_m[2],2'b00}+{result_m[3],3'b000}+{result_m[4],4'b0000}+{result_m[5],5'b0_0000}+{result_m[6],6'b00_0000}+{result_m[7],7'b000_0000};
    end
endmodule
================
可以用同一个测试程序验证
发表于 2010-1-29 15:51:02 | 显示全部楼层
支持!!
 楼主| 发表于 2010-1-29 17:23:15 | 显示全部楼层
rotings真是牛人呀!不知道什么时候才能想rotings一样。

再次感谢各位大侠!再次感谢rotings。
发表于 2018-2-27 10:58:44 | 显示全部楼层
回复 5# frankytm1984
没有端口说明,一般定义好module后接着定义input/output。
发表于 2018-3-1 12:31:28 | 显示全部楼层
感谢各位
发表于 2018-3-1 12:54:23 | 显示全部楼层
回复 13# skytang007
result = 0;是每次进入always块都要赋值吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 13:39 , Processed in 0.024272 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表