ASIC-WORLD Verilog(9)循环语句

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

写在前面

        在自己准备写一些简单的verilog教程之前,参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。

        这是网站原文:Verilog Tutorial

        这是系列导航:Verilog教程系列文章导航


        Verilog语法中有四种基本的循环语句,他们都只能在always和initial块中使用:

  • foever
  • repeat
  • while
  • for

        这些语句基本都和C语言中的对应语句类似,如果你学过C语言(或者其他变成语言),那么对这4中语句的用法都不会陌生。      

foever语句

        forever是一个无限执行的语句,它不会停止。它的一般语法是这样的:

syntax : forever < statement >

        

        forever的无限循环特性使得其一般被用来生成时钟信号:

module forever_example ();

reg clk;

initial begin
  #1 clk = 0; 
  forever begin
    #5 clk = !clk; 
  end
end 

initial begin
  $monitor ("Time = %d  clk = %b",$time, clk);
  #100 $finish;
end

endmodule

        这是仿真的结果,生成了时钟信号(注意这里用了$finish来结束仿真,不然这将会无限循环):

ASIC-WORLD Verilog(9)循环语句

        或者看看更直观的波形图:

ASIC-WORLD Verilog(9)循环语句

repeat语句

        repeat语句不会无限循环,它只会执行特定的次数,这个特定次数将在repeat后面由开发者指定。这是它的一般语法:

syntax : repeat (< number >) < statement >        //< number >内指定循环次数

       

        下面的例子,实现了8次向左移位,即repeat(8)次。

module repeat_example();
reg  [3:0] opcode;
reg  [15:0] data;
reg        temp;

always @ (opcode or data)
begin
  if (opcode == 10) begin
    // Perform rotate
    repeat (8) begin 
      #1 temp = data[15];
      data = data << 1;
      data[0] = temp;   
    end 
  end
end
// Simple test code
initial begin
   $display (" TEMP  DATA");
   $monitor (" %b     %b ",temp, data);
   #1 data = 18'hF0;
   #1 opcode = 10;
   #10 opcode = 0;
   #1 $finish;
end

endmodule

        这是仿真结果:

ASIC-WORLD Verilog(9)循环语句

 while语句

        和C语言的while语句类似,Verilog中的while语句也是当其表达式为真时,即执行对应的语句;反之亦然。它的一般语法:

syntax : while (< expression >) < statement >

        下面的例子,实现当data是不同的值时,对loc分别赋值。

module while_example();

reg [5:0] loc;
reg [7:0] data;

always @ (data or loc)
begin
  loc = 0;
  // If Data is 0, then loc is 32 (invalid value)
  if (data == 0) begin
    loc = 32;
  end else begin
    while (data[0] == 0) begin
      loc = loc + 1;
      data = data >> 1;
    end
  end 
  $display ("DATA = %b   LOCATION = %d",data,loc);
end

initial begin
  #1 data = 8'b11;
  #1 data = 8'b100;
  #1 data = 8'b1000;
  #1 data = 8'b1000_0000;
  #1 data = 8'b0;
  #1 $finish;
end

endmodule

        这是仿真结果:

ASIC-WORLD Verilog(9)循环语句

for语句

        和其他变成语言中的for语句一样:

  • < initial assignment >只会在循环开始时执行一次
  • 当表达式< expression >为真就会一直执行循环内对应的语句
  • 在每次循环结束时执行 <step assignment>

        这是它的一般语法:

syntax : for (< initial assignment >; < expression >, < step assignment >) < statement >

        需要注意的是,由于Verilog没有 ++或者--这个运算符,所以在for语句中请不要写这种类似的语句:

i++;                

i--;

        而是要写成这样:

i = i + 1;

i = i - 1;

        下面的例子通过for循环来个一个深度为8的RAM赋值:

module for_example();

integer i;
reg [7:0] ram [0:7];

initial begin
  for (i = 0; i < 8; i = i + 1) begin
    #1 $display(" Address = %g  Data = %h",i,ram[i]);
    ram[i] <= i; // Initialize the RAM with 0
    #1 $display(" Address = %g  Data = %h",i,ram[i]);
  end
  #1 $finish;
end

endmodule

        仿真结果如下,分别打印出了赋值前后的RAM中的数据值。

ASIC-WORLD Verilog(9)循环语句文章来源地址https://www.toymoban.com/news/detail-440707.html


  • 📣您有任何问题,都可以在评论区和我交流📃!
  • 📣本文由 孤独的单刀 原创,首发于CSDN平台🐵,博客主页:wuzhikai.blog.csdn.net
  • 📣您的支持是我持续创作的最大动力!如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!

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

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

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

相关文章

  • ASIC-WORLD Verilog(5)基础语法下篇

            在自己准备写一些简单的verilog教程之前,参考了许多资料----asic-world网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。         这是网站原文:http://asic-world.com/verilog/veritut.html       

    2023年04月17日
    浏览(37)
  • ASIC-WORLD Verilog(4)基础语法上篇

            在自己准备写一些简单的verilog教程之前,参考了许多资料----asic-world网站的verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。         这是网站原文:http://asic-world.com/verilog/veritut.html         这

    2023年04月10日
    浏览(38)
  • ASIC-WORLD Verilog(11)过程时序控制

            在自己准备写一些简单的verilog教程之前,参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。         这是网站原文:Verilog Tutorial         这是系列导航:

    2024年02月14日
    浏览(36)
  • ASIC-WORLD Verilog(10)编写测试脚本Testbench的艺术

            在自己准备写一些简单的verilog教程之前,参考了许多资料----Asic-World网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。         这是网站原文:Verilog Tutorial         这是系列导航:

    2024年02月07日
    浏览(36)
  • Verilog Tutorial(8)循环语句

    在自己准备写verilog教程之前,参考了许多资料----FPGA Tutorial网站的这套verilog教程即是其一。这套教程写得不错,只是没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。 这是网站原文:https://fpgatutorial.com/verilog/ 这是系列导航:Verilog教程系列文章导航 这篇文

    2023年04月10日
    浏览(40)
  • Verilog中的 条件语句\多路分支语句\循环语句

    一、背景 由于初学Verilog,故写篇笔记记录Verilog中的 if-else 、 case-endcase 、 for 、 while 、 repeat 、 forever 语法,以及例子。 二、if-else 定个标准,每个 if-else 的出现都要有 begin-end 语句。 2.1 标准结构 条件语句标准使用结构: 2.2 例子 二输入选择器: 三、case-endcase case 语句是一

    2024年02月11日
    浏览(47)
  • Verilog循环语句(for、while、foever和repeat)

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

    2024年02月04日
    浏览(48)
  • Verilog中forever、repeat、while、for四类循环语句(含Verilog实例)

            当搭建FPGA逻辑时,使用循环语句可以使语句更加简洁易懂,Verilog中存在四类循环语句,如标题,几种循环语句的具体介绍和用法如下: (1)forever:连续的执行语句         语法格式:foreverstatement         forever循环语句常用于产生周期性的 时钟波形 作为仿真

    2024年02月13日
    浏览(41)
  • 【C语言趣味教程】(11) 循环语句Ⅰ:while 循环 | 循环的类型 | 流程图基础 | 循环的定义 | 死循环 | while 循环嵌套 | break 语句 | continue 语句

        🔗 《C语言趣味教程》👈 猛戳订阅!!! \\\"我们先来思考一个富有哲学性的问题,人类的本质是什么?我们知道,人类的本质就是复读机!那复读机的本质又是什么?复读机的本质就是循环!本章的主题就是循环,我们来好好研究研究,还是和上一章一样,我们先介绍

    2024年02月03日
    浏览(53)
  • [Python入门]Python中的循环语句(for循环语句)

    一、for 循环简介 循环就是重复做某件事,for循环是python提供第二种循环机制(第一种是while循环),理论上for循环能做的事情,while循环都可以做。 for 的语句格式如下: for  变量   in   循环序列:         【循环体】 注:通过 for 循环依次将 循环序列 中的数据取出赋

    2024年04月11日
    浏览(102)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包