0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

verilog语法基础知识

jf_GctfwYN7 来源:IC修真院 2023-07-08 10:40 次阅读

循环语句分为以下4种:

for语句——通过三个步骤来决定语句的循环执行:

1.给控制循环次数的变量赋初值;

2.判定循环执行条件,若为假则跳出循环;若为真,则执行指定语句后,转到第三步

3.修改循环变量的值,返回第二步

repeat——连续执行一条语句n次;

while——执行一条语句,直到循环条件不满足;若一开始条件不满足,则该语句一次也不能执行

forever——无限连续的执行语句,可用disable语句中断。

for语句

形式:

for(循环变量赋初值;循环执行条件;循环变量增值) 执行语句

例:用for语句描述7人投票表决器:超过4人投赞成票,则表决通过

module vote7(
output      pass,
input [6:0] vote
);


reg [2:0] sum;  //sum 为reg变量,用于统计赞成的人数
integer    i;
regpass;


always @(vote)
  begin
    sum = 0;   //sum初始值为0
for(i=0;i<=6;i++)    //for语句
  if(vote[i])   sum=sum+1;  //只要有人投赞成票,sum加1
  
  if(sum[2])   pass =1;    //若超过4人,pass为1
  else         pass =0;
  end
endmodule
例:用for语句初始化memory
begin:init_mem
  reg [7:0] tempi;  //存储器的地址变量
  for(tempi=0;tempi
例:用for语句实现两个二进制数乘法
module mult_for (outcome,a,b);
parameter size =8;
output [2*size:1]  outcome;
input  [size;1]    a,b;
reg    [2*size:1]  outcome;
integer            i;


always@(a or b)
  begin
    outcome = 0;
for(i=1;i<=size;i=i+1)
  if(b[i]) outcome = outcome +(a<<(i-1));
  end
endmodule

repeat语句(不可综合)

无条件连续执行一条或多条语句n次

格式:repeat(循环次数表达式)语句

例:用repeat语句和移位操作实现两个8位二进制数乘法

module mult_repeat(outcome,a,b);
parameter size=8;
output[2*size:1]  outcome;
input [size:1]    a,b;     //a 为被乘数,b为乘数
reg   [2*size:1]  outcome;
reg   [2*size:1]  temp_a;  //中间变量,存放操作数a左移移位的结果
reg[2*size:1]temp_b;//中间变量,存放操作数b右移移位的结果


always@(a or b)
   begin
    outcome = 0;
temp_a = a;
temp_b = b;
repeat(size)
  begin
    if(temp_b[1])   //如果tem_b的最低位是1,则执行下面加法
  outcome = outcome + temp_a;
  temp_a = temp_a <<1;  //操作数a左移一位,以便代入上式,求部分积
  temp_b = temp_b >>1;  //操作数b右移一位,以便取temp_b【1】
  end
   end
endmodule

while 语句

有条件地执行一条或多条语句

首先判断循环执行条件表达式是否为真。若为真,则执行后面的语句或语句块;然后再回头判断循环执行条件表达式是否为真,若为真,再执行一次后边的语句;如此不断,直到条件表达式不为真.

格式:while(循环执行条件表达式) 语句

注1:首先判断循环执行条件表达式是否为真,若为假,则其后的语句一次也不执行

注2:在执行语句中,必须有一条改变循环执行条件表达式的值的语句

注3:while语句只有当循环块有事件控制(即@(posedge clk))时才可综合。

例:用while语句对一个8位二进制中值为1的位进行计数

module count1s_while(count,rega,clk);
output [3:0]  count;
input  [7:0]  rega;
input         clk;
reg    [3:0]  count;
always@(posedge clk)
  begin:count1
    reg[7:0] tempreg;  //用作循环执行条件表达式
count =0;          //count初始值为0
tempreg = rega;    //tempreg初值为rega 
while(tempreg)     //若tempreg非0,则执行下边语句
    begin
  if(tempreg[0])  count = count + 1;
               //只要tempreg最低位为1,则count加1
  tempreg = tempreg >>1;  //右移1位
end
  end
endmodule
例:用for语句对一个8位二进制中值为1的位进行计数
module count1s_for_good(count,rega);
output [3:0]   count;
input  [7:0]   rega;
reg    [3:0]   count;
always@(rega)
begin:block
   integer i;
   count = 0;
   for(i=0;i<=7;i++)
     if(rega[i])   count = count +1;
end
endmodule

forever语句

无条件连续执行forever后面的语句或语句块。

格式:forever 语句;

常用在测试模块中产生周期性的波形,作为仿真激励信号

常用disable语句跳出循环。

注:不同于always语句,不能独立写在程序中,一般用在initial语句块中。

语句的顺序执行

在always模块内,逻辑按书写的顺序执行。

顺序语句——always模块内的语句

在always模块内,若随意颠倒赋值语句的书写顺序,可能导致不同的结果

module serial2(q,a,clk);
output q,a;
input  clk;
reg    q,a;
always @(posedge clk)
  begin
    a = ~q;
    q = ~q;  
  end
endmodule

22295c12-1cb2-11ee-962d-dac502259ad0.png

always模块,assign语句,实例元件都是同时执行的,它们在程序中的先后顺序对结果并没有影响。

module parall1(q,a,clk);
output q,a;
input  clk;
reg    q,a;
always @(posedge clk)
  begin
    q = ~q;
  end
always @(posedge clk)
  begin
a = ~q;
  end
endmodule
module parall2(q,a,clk);
output q,a;
input  clk;
reg    q,a;
always @(posedge clk)
  begin
    a = ~q;    
  end
always @(posedge clk)
  begin
q = ~q;
  end
endmodule
224f06d8-1cb2-11ee-962d-dac502259ad0.png





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7448

    浏览量

    163588
  • 二进制
    +关注

    关注

    2

    文章

    793

    浏览量

    41593
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8211

原文标题:IC学霸笔记 | Verilog语法之循环语句

文章出处:【微信号:IC修真院,微信公众号:IC修真院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    哪有FPGA的verilog编程基础知识

    没接触过FPGA开发,那个verilog编程有什么入门基础知识学习的?
    发表于 04-29 23:09

    Verilog HDL练习题和Verilog基础知识适合verilog新人

    Verilog HDL练习题和Verilog基础知识适合verilog新人Verilog HDL练习题.pdfVerilog
    发表于 08-15 15:08

    Verilog基础知识

    Verilog基础知识
    发表于 09-30 08:50

    Verilog HDL基础知识

    Verilog HDL基础知识:硬件描述语言是硬件设计人员和电子设计自动化工具之间的界面。其主要目的是用来编写设计文件,建立电子系统行为级的仿真模型即利用计算机的巨大能力对用
    发表于 05-31 19:33 49次下载

    可综合的Verilog语法和语义

    可综合的Verilog语法和语义(剑桥大学,影印):第七版
    发表于 05-21 14:50 27次下载
    可综合的<b class='flag-5'>Verilog</b><b class='flag-5'>语法</b>和语义

    Verilog HDL实验练习与语法手册

    Verilog HDL实验练习与语法手册-高教
    发表于 05-11 11:30 0次下载

    Verilog基础知识

    Verilog基础知识,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-10 15:29 4次下载

    Verilog_HDL基础知识非常好的学习教程 (1)

    Verilog_HDL基础知识非常好的学习教程 (1)
    发表于 01-04 12:33 0次下载

    常见的Verilog行为级描述语法

    常见的Verilog描述语句与对应的逻辑关系;熟悉语法与逻辑之间的关系
    的头像 发表于 09-15 08:18 1w次阅读
    常见的<b class='flag-5'>Verilog</b>行为级描述<b class='flag-5'>语法</b>

    Verilog HDL的基础知识详细说明

    硬件描述语言基本语法和实践 (1)VHDL 和Verilog HDL的各自特点和应用范围 (2)Verilog HDL基本结构语言要素与语法规则 (3)
    发表于 07-03 17:36 54次下载
    <b class='flag-5'>Verilog</b> HDL的<b class='flag-5'>基础知识</b>详细说明

    Verilog教程之Verilog HDL数字集成电路设计方法和基础知识课件

    本文档的主要内容详细介绍的是Verilog教程之Verilog HDL数字集成电路设计方法和基础知识课件
    发表于 12-09 11:24 53次下载
    <b class='flag-5'>Verilog</b>教程之<b class='flag-5'>Verilog</b> HDL数字集成电路设计方法和<b class='flag-5'>基础知识</b>课件

    Verilog语法进阶

    Verilog语法进阶说明。
    发表于 05-06 16:14 30次下载

    Verilog HDL入门教程-Verilog HDL的基本语法

    Verilog HDL入门教程-Verilog HDL的基本语法
    发表于 01-07 09:23 178次下载

    Verilog基础知识

    本节主要讲解了 Verilog基础知识,包括 7 个小节,下面我们分别给大家介绍这 7 个小节的内容。
    的头像 发表于 08-15 09:04 2379次阅读

    Verilog HDL的基础知识

    本文继续介绍Verilog HDL基础知识,重点介绍赋值语句、阻塞与非阻塞、循环语句、同步与异步、函数与任务语法知识
    的头像 发表于 10-24 15:00 169次阅读
    <b class='flag-5'>Verilog</b> HDL的<b class='flag-5'>基础知识</b>