Verilog中的 条件语句\多路分支语句\循环语句

这篇具有很好参考价值的文章主要介绍了Verilog中的 条件语句\多路分支语句\循环语句。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Verilog中的条件语句\多分支语句\循环语句

一、背景

由于初学Verilog,故写篇笔记记录Verilog中的 if-elsecase-endcaseforwhilerepeatforever语法,以及例子。

二、if-else

定个标准,每个if-else的出现都要有begin-end语句。

2.1 标准结构

条件语句标准使用结构:


if (condition1) begin
    true_statement1 ;
end
else if (condition2) begin
    true_statement2 ;
end
else if (condition3) begin
    true_statement3 ;
end
else begin
    default_statement ;
end
2.2 例子

二输入选择器:

if(en) begin
    if(sel == 2'b1) begin
        sout = p1 ;
    end
    else begin
        sout = p0 ;
    end
end

三、case-endcase

case 语句是一种多路条件分支的形式,可以解决 if 语句中有多个条件选项时使用不方便的问题。casexcasez 语句是 case 语句的变形,用来表示条件选项中的无关项。

3.1 标准结构
case(case_expr)
    condition1: true_statement1 ;
    condition2: true_statement2 ;
    ……
    default: default_statement ;
endcase

casex 用 “x” 来表示无关值,casez 用问号 “?” 来表示无关值。

两者的实现的功能是完全一致的,语法与 case 语句也完全一致。

但是 casexcasez 一般是不可综合的,多用于仿真。

例如用 casez 语句来实现一个 4bit 控制端的 4 路选择选择器。

3.2 例子
3.2.1 三路选择器的case部分,如下:
case(sel)
    2'b00:  sout_t = p0 ;
    2'b01:  sout_t = p1 ;
    2'b10:  sout_t = p2 ;
    default:    sout_t = p3 ;
endcase
3.2.2 casez的四路选择器,如下:
module mux4to1(
    input [3:0]     sel ,
    input [1:0]     p0 ,
    input [1:0]     p1 ,
    input [1:0]     p2 ,
    input [1:0]     p3 ,
    output [1:0]    sout);
 
    reg [1:0]     sout_t ;
    always @(*)
        casez(sel)
            4'b???1:     sout_t = p0 ;
            4'b??1?:     sout_t = p1 ;
            4'b?1??:     sout_t = p2 ;
            4'b1???:     sout_t = p3 ;  
        default:         sout_t = 2'b0 ;
    endcase
    assign      sout = sout_t ;
 
endmodule

四、for

4.1 标准结构

for 循环语法格式如下:

for(initial_assignment; condition ; step_assignment)  begin
    …
end
4.2 例子
// for 循环语句
integer      i ;
reg [3:0]    counter2 ;
initial begin
    counter2 = 'b0 ;
    for (i=0; i<=10; i=i+1) begin
        #10 ;
        counter2 = counter2 + 1'b1 ;
    end
end

五、repeat

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

5.1 标准结构

repeat循环语法格式如下:

repeat (loop_times) begin
    …
end
5.2 例子
5.2.1 循环11次
// repeat 循环语句
reg [3:0]    counter3 ;
initial begin
    counter3 = 'b0 ;
    repeat (11) begin  //重复11次
        #10 ;
        counter3 = counter3 + 1'b1 ;
    end
end
5.2.2 存储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]    <= counter3 ;       //在下一个clk的上升沿赋值
            j = j + 1 ;
        end
     end
end

仿真结果如下图。
由图可知,rstn 拉高时,buffer的 8 个向量同时赋值为 0。

第二个时钟周期后,buffer依次被counter3赋值,实现了连续存储 8 个数据的功能。
Verilog中的 条件语句\多路分支语句\循环语句,verilog

六、forever

forever语句表示永久循环,不包含任何条件表达式,一旦执行便无限的执行下去,系统函数$finish可退出forever
forever相当于while(1)
通常,forever 循环是和时序控制结构配合使用的。

6.1 标准结构

forever循环语法格式如下:文章来源地址https://www.toymoban.com/news/detail-672224.html

forever begin
    …
end
6.2 例子
6.2.1 产生一个时钟
reg          clk ;
initial begin
    clk       = 0 ;
    forever begin
        clk = ~clk ;
        #5 ;
    end
end
6.2.2 实现一个时钟边沿控制的寄存器间数据传输功能
reg    clk ;
reg    data_in, data_temp ;
initial begin
    forever @(posedge clk)      data_temp = data_in ;
end

到了这里,关于Verilog中的 条件语句\多路分支语句\循环语句的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Verilog循环语句(for、while、foever和repeat)

    本文主要介绍verilog常用的循环语句,循环语句的用途,主要是可以多次执行相同的代码或逻辑。 verilog的循环语句主要有:for循环、while循环、foever循环和repeat循环。 注意注意,for循环在正式FPGA设计中部分情况下可综合,其余几个循环语句均不可综合,主要用于testbench。 f

    2024年02月04日
    浏览(48)
  • verilog中的for 循环

    例1. 令x=3,仿真结果 综合结果: for循环n次代表有n个相似的电路模块存在;代码上的“循环反馈”结构在阻塞赋值时代表前后有关联 综合结果既不是一个加法器循环三次(C语言),也不是三个并联的加法器(generate for),而是三个加法器串联 注: input [7:0] n Error (10119): Verilog HD

    2023年04月10日
    浏览(36)
  • verilog中的3种for循环的写法

    直接进入正题,对于for循环的三种循环做以下介绍: for循环用于例化多个模块 注意点: (1)例化模块在for循环内部 (2)for循环需加名字 (3)genvar 定义在generate外面,可以全局使用(不推荐使用,最好一个generate for,对应一个循环变量) for循环写多个always块或者写多个

    2023年04月11日
    浏览(37)
  • Verilog force语句详解:FPGA中的信号强制赋值

    Verilog force语句详解:FPGA中的信号强制赋值 在FPGA开发中,时序分析和调试是非常重要的一部分。其中,对于一些信号的调试,我们需要准确地模拟不同的情况来检测其工作状态。这时,Verilog force语句就起到了重要的作用。 force语句可以使信号立即进行强制赋值操作,在仿真

    2024年02月06日
    浏览(36)
  • 【FPGA/verilog -入门学习4】verilog 实现多路脉冲计数

    设计一个脉冲计数器,其功能如下 输入脉冲:4路脉冲信号,分别对每路进行脉冲检测并计数 使能信号:高电平进行计数,低电平清零计数器 计数器:在使能信号高电平期间,对脉冲信号的上升沿进行检测并递增计数值 编写测试脚本,进行仿真验证 使用上一章的一路脉冲检

    2024年02月04日
    浏览(48)
  • Verilog中的force语句用来强制更改信号的值,特别适用于仿真和调试。本文将深入探讨force语句在FPGA开发中的应用和注意事项。

    Verilog中的force语句用来强制更改信号的值,特别适用于仿真和调试。本文将深入探讨force语句在FPGA开发中的应用和注意事项。 首先,我们需要了解force语句的语法。其基本格式为force [time] signal = value。其中,time是可选参数,表示在何时开始强制更改信号的值;signal是要更改的

    2024年02月12日
    浏览(71)
  • Verilog数字系统设计——4 选1 多路选择器

    试分别使用assign、门级原语和always 语句设计4 选1 多路选择器,并写出测试代码进行测试。要求编制测试模块对实现的逻辑功能进行完整的测试; 实验提交Verilog设计文件(.v文件)和仿真波形截图,文件打包,压缩包以自己的学号+姓名命名; 仿真截图 下面展示一些 内联代码

    2024年02月08日
    浏览(44)
  • FPGA的verilog关于多路选择器(2选1)的设计

    ​​​​​​​ 实验目的 实现一个多路选择器,进行“2选1”。也就是对2个信号进行1个特定条件的筛选,满足这个特定条件的话,其中一个的数值或信息就成为输出信号的数值或信息。不满足此条件的,就输出另一个信号的数值和信息。 实验原理 理论原理 2个输入信号,选

    2024年02月07日
    浏览(44)
  • 【FPGA】Verilog 实践:MUX 多路复用器 | Multiplexer | 实现 4 到 1 线路多路复用器

    0x00 MUX 多路复用器(Multiplexer) 多路复用器 (Multiplexer,简称 MUX) 是一种电路,用于从多个输入中选择一个特定输入。它为  个输入提供一个输出,并有  个 select single,作用是从多个输入中选择一个。 多路复用器有两个主要部分:选择器和数据线。选择器用于选择输入信号中

    2024年02月04日
    浏览(44)
  • 多路彩灯控制器LED流水灯花型verilog仿真图视频、源代码

    名称:多路彩灯控制器LED流水灯花型verilog 软件:Quartus 语言:Verilog 代码功能:      用quartus和modelism,设计一个多路彩灯控制器,能够使花型循环变化,具有复位清零功能,并可以选择花型变化节奏。具体要求如下:  1)彩灯控制器由16路发光二极管构成,当控制开关打开时

    2024年02月04日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包