当前位置:首页 > 新闻资讯 > FPGA之家动态 >

【从0开始学FPGA-11】Verilog:结构说明语句

时间:2024-08-08      来源:网络搜集 关于我们 0

 一个多年老硬件攻城狮,开始从0学FPGA......

小编通过Vivado学习了几个例程,基本把软件环境搞通了,最大的体会是回到Verlilo的学习,只有把Verilog这门语言学会了,才能在实际的开发中得心应手。需求是输入,算法是核心、语言和开发环境是工具,真所谓“巧妇难为无米之炊”。Verilog 语言中的任何过程模块都从属于以下4种结构的说明语句:(1)initial说明语句;(2)always说明语句;(3)task说明语句;(4)funetion说明语句一个程序模块可以有多个 initial和 always 过程块。每个initial和 always 说明语句在仿真的一开始同时立即开始执行。initial语句只执行一次,而always 语句则不断地重复活动着,直到仿真过程结束。但 always语句后紧跟的过程块是否运行,则要看它的触发条件是否满足,如满足则运行过程块一次,再次满足则再运行一次,直至仿真过程结束。在一个模块中,使用 initial和 always 语句的次数是不受限制的,它们都是同时开始运行的。task 和function语句可以在程序模块中的一处或多处调用。

01

initial语句

initial 语句的格式如下:

        initial  

            begin

               语句1;

               语句2;

               语句3;                ......                语句n;              end例1:

    initial

        begin

            areg =0;        //初始化寄存器areg

   for(index=0;index<size:index=index+1)

            memory[lindex]=0;      //初始化一个memory

        end

在这个例子中用initial语句在仿真开始时对各变量进行初始化,这个初始化过程不需要任何仿真时间,即在0ns时间内,便可以完成存储器的初始化工作。例2:initial              begin        inputs =b000000: //初始时刻为0#10 inputs =b011001;    #10 inputs =b011011;    #10 inputs =b011000;    #10 inputs =6001000;    end这个例子中,initial语句的另一用途,即用initial语句来生成激励波形作为电路的测试仿真信号。注意:一个模块中可以有多个initial块,它们都是并行运行的。initial 块常用于测试文件和虚拟模块的编写,用来产生仿真测试信号和设置信号记录等仿真环境。

02

always语句

  always 语句的格式如下:always语句在仿真过程中是不断活动着的。但 always 语句后跟着的过程块是否执行,则要看它的触发条件是否满足,如满足则运行过程块一次;如不断满足,则不断地循环执行。其声明格式如下:always<时序控制> <语句>always语句由于其不断活动的特性,只有和一定的时序控制结合在一起才有用。如果一个 always语句没有时序控制,则这个always语句将会使仿真器产生死锁。例1:always areg=~areg;这个always语句将会生成一个0延迟的无限循环跳变过程,这时会发生仿真死锁。但如果加上时序控制,则这个 always语句将变为一条非常有用的描述语句,见例2。例2:always #harf_period=~areg;这个例子生成了一个周期为:period(=2*half_period)的无限延续的信号波形。常用这种方法来描述时钟信号,并作为激励信号来测试所设计的电路。always的时间控制可以是沿触发也可以是电平触发的,可以单个信号也可以多个信号,中间需要用关键字or连接,or也可以用“,”替代。用于边沿触发的格式如下:always @( posedge clock or posedge reset) //or可以用“,”替    begin

     语句1;

     语句2;

     语句3;          ......      语句n;        end由两个沿触发的always只要其中个沿出现,就立即执行一次过程块。上升沿posedge,下降沿negedeg用于电平触发的格式如下:always @( a or b or c or d)   //or可以用“,”替    begin

     语句1;

     语句2;

     语句3;          ......      语句n;        end如果组合逻辑块语句的输入变量很多,组合逻辑在编写always语句时候,需要将输入的所有变量都加入敏感列表里面。那么编写敏感列表会很烦琐并且容易出错。针对这种情况,Verilog提供另外两个特殊的符号:@*@(*),它们都表示对其后面语句块中所有输入变量的变化是敏感的。

03

task和functiion语句

task 和function说明语句分别用来定义任务和函数,利用任务和函数可以把一个很大的程序模块分解成许多较小的任务和函数便于理解和调试。输人、输出和总线信号的值可以传人、传出任务和函数。任务和函数往往在大的程序模块中和在不同地点多次用到的相同的程序段。学会使用 task 和 function 语句可以简化程序的结构,使程序明白易懂,是编写较大型模块的基本功。初期的学习就先不深入掌握了,以后有机会在补充吧!----------------------------------------------------------

参考书籍:【《FPGA原理和结构》(日) 天野英晴】

----------------------------------------------------------高清HDMI 2.0线】推荐淘宝店铺“电子eStore

"所卖的这款,多种线材规格可供选择。

   【淘宝】https://m.tb.cn/h.gZ7bXRf?tk=rDGhWr2rQ96 MF1643 「绿联hdmi线2.0清线4k视频传输线黄黑头黑色工程HDMI线」点击链接直接打开 或者 淘宝搜索直接打开

----------------------------------------------------------------

----------------------------------------------------------------

关注小编一起学FPGA......


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言