verilog的repeat语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog的repeat语句相关的知识,希望对你有一定的参考价值。

在仿真时,repeat循环语句;如repeat(10);所谓的10次循环时相对于什么说的,是一个时候周期吗?还是与timascale的时间有关?

repeat 循环语句执行指定循环数,如果循环计数表达式的值不确定,即为 x 或z 时,那
么循环次数按 0 处理。repeat 循环语句的语法为 
repeat(循环次数表达式) begin 
    语句块; 
end 
其中, “循环次数表达式”用于指定循环次数,可以是一个整数、变量或者数值表达式。
如果是变量或者数值表达式,其数值只在第一次循环时得到计算,从而得以事先确定循环次
数; “语句块”为重复执行的循环体。 
在可综合设计中, “循环次数表达式”必须在程序编译过程中保持不变。下面给出一个

module mult_8b_repeat( 
    a, b, q , a_t1
    ); 
   
  parameter bsize = 8; 
  input  [bsize-1 : 0] a, b; 
  output [2*bsize-1 : 0] q; 
  output 
  reg [2*bsize-1 : 0] a_t1; 
  reg [2*bsize-1 : 0] q, a_t; 
  reg [bsize-1 : 0] b_t; 
   
  always @(a or b) begin 
     q = 0; 
   a_t = a; 
   
   //a_t1 = bsize[0],a; 
   
   b_t = b; 
    
   repeat(bsize) begin 
    if (b_t[0]) begin 
       q = q + a_t;     
           end 
    else begin 
       q = q; 
    end 
    a_t = a_t << 1; 
    b_t = b_t >> 1;  
   end 
  end 
 
endmodule

 

波形:

参考技术A 和timescale没有关系的。repeat(10)和C语言的for循环是一样的。一般repeat(10)后面会带执行语句的,意思就是repeat后所带语句重复执行10次。
repeat与for之间转换:
repeat 的10次循环为:
repeat(10)
begin
A
end

for的10次循环为:
for(i=0;i<10;i++)

A
本回答被提问者和网友采纳

verilog仿真的时钟问题

`timescale 1 us/ 1 us

parameter PERIOD = 4;

always
begin
语句1:clock<=#(PERIOD/2) ~clock;
语句2:#(PERIOD/2) clock<= ~clock;
end
请问,语句1和语句2有什么区别么?
请不要告诉我没有区别!因为我用modelsim仿真的时候,使用语句2就正确。而是用语句1导致memory space不足。。。
我是4G内存,仿真个100us,不可能不足吧。。。
求高手指点。。。

语句1的意思是在A时刻计算等号右边的值,再在A+PERIOD/2赋值给目标变量,语句2则是在A+PERIOD/2时刻计算右边的值并赋值给变量。比如C= #10 A+B;是在0时刻计算A+B的值,后在10时刻更新C的值为A+B,而“#10 C=A+B”是在10时刻计算A+B的值并更新至C;两个语句本身都没有问题,造成报错的原因可能是其他语句里有冲突。追问

其它语句的确没问题,我只修改了这一个地方,直接就把内存跑爆了,仿真一个128字节的RAM而已,内存没这么容易爆吧?我之前50M的时钟跑了40多分钟,电脑都没问题。。。
这次一个笔误将这个延时放在语句内延时,作为时钟信号,果断内存爆了。。。

参考技术A 提示这种错误应该不是语句的问题,而且你只仿真100us,不会超出此范围的 参考技术B 。。 参考技术C 建议你把所有us 改成ns,试试

以上是关于verilog的repeat语句的主要内容,如果未能解决你的问题,请参考以下文章

Verilog的循环语句

Verilog中如何用assign条件判断语句构造三选一数据选择器?

在systemverilog的task中只能用阻塞赋值么

Verilog学习笔记基本语法篇········ 循环语句

verilog语句执行顺序的疑问?

repeat语句(pascal)