浅谈Verilog循环语句

在Verilog中存在着四种类型的循环语句,用来控制执行语句的执行次数。其语法和用途与C语言很类似,下面为大家讲解一下Verilog循环语句。

关键词:while, for, repeat, forever

Verilog 循环语句有 4 种类型,分别是 while,for,repeat,和 forever 循环。循环语句只能在 always 或 initial 块中使用,但可以包含延迟表达式。

while 循环

while 循环语法格式如下:

while (condition) begin
   …
end

while 循环中止条件为 condition 为假。

如果开始执行到 while 循环时 condition 已经为假,那么循环语句一次也不会执行。

当然,执行语句只有一条时,关键字 begin 与 end 可以省略。

下面代码执行时,counter 执行了 11 次。

实例

`timescale 1ns/1ns

module test ;

   reg [3:0]    counter ;
   initial begin
       counter = 'b0 ;        while (counterb1 ;        end    end   //stop the simulation    always begin        #10 ;  if ($time >= 1000) $finish ;    end endmodule 

仿真结果如下:

for 循环

for 循环语法格式如下:

for(initial_assignment; condition ; step_assignment)  begin
   …
end

initial_assignment 为初始条件。

condition 为终止条件,condition 为假时,立即跳出循环。

step_assignment 为改变控制变量的过程赋值语句,通常为增加或减少循环变量计数。

一般来说,因为初始条件和自加操作等过程都已经包含在 for 循环中,所以 for 循环写法比 while 更为紧凑,但也不是所有的情况下都能使用 for 循环来代替 while 循环。

下面 for 循环的例子,实现了与 while 循环中例子一样的效果。需要注意的是,i = i + 1 不能像 C 语言那样写成 i++ 的形式,i = i -1 也不能写成 i — 的形式。

实例

// for 循环语句
integer      i ;
reg [3:0]    counter2 ;
initial begin
   counter2 = 'b0 ;    for (i=0; ib1 ;    end end 

repeat 循环

repeat 循环语法格式如下:

repeat (loop_times) begin
   …
end

repeat 的功能是执行固定次数的循环,它不能像 while 循环那样用一个逻辑表达式来确定循环是否继续执行。repeat 循环的次数必须是一个常量、变量或信号。如果循环次数是变量信号,则循环次数是开始执行 repeat 循环时变量信号的值。即便执行期间,循环次数代表的变量信号值发生了变化,repeat 执行次数也不会改变。

下面 repeat 循环例子,实现了与 while 循环中的例子一样的效果。

实例

// repeat 循环语句
reg [3:0]    counter3 ;
initial begin
   counter3 = 'b0 ;    repeat (11) begin  //重复11次        #10 ;        counter3 = counter3 + 1'b1 ;
   end
end

下面 repeat 循环例子,实现了连续存储 8 个数据的功能:

实例

always @(posedge clk or negedge rstn) begin
   j = 0  ;
   if (!rstn) begin
       repeat (8) begin
           buffer[j]   'b0 ;      //没有延迟的赋值,即同时赋值为0
           j = j + 1 ;
       end
   end
   else if (enable) begin
       repeat (8) begin
           @(posedge clk) buffer[j]    

仿真结果如下图。

由图可知,rstn 拉高时,buffer 的 8 个向量同时赋值为 0。

第二个时钟周期后,buffer 依次被 counter3 赋值,实现了连续存储 8 个数据的功能。

forever 循环

forever 循环语法格式如下:

forever begin
   …
end

forever 语句表示永久循环,不包含任何条件表达式,一旦执行便无限的执行下去,系统函数 $finish 可退出 forever。

forever 相当于 while(1) 。

通常,forever 循环是和时序控制结构配合使用的。

例如,使用 forever 语句产生一个时钟:

实例

reg          clk ;
initial begin
   clk       = 0 ;
   forever begin
       clk = ~clk ;
       #5 ;
   end
end

例如,使用 forever 语句实现一个时钟边沿控制的寄存器间数据传输功能:

实例

reg    clk ;
reg    data_in, data_temp ;
initial begin
   forever @(posedge clk)      data_temp = data_in ;
end

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/212330.html<

(0)
运维的头像运维
上一篇2025-04-10 19:46
下一篇 2025-04-10 19:47

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注