当前位置:   article > 正文

FPGA设计Verilog基础之Verilog的顺序块、并行块和块名的详细介绍_顺序块中须有时序控制信号‘

顺序块中须有时序控制信号‘

注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus

FPGA设计Verilog基础之Verilog的顺序块、并行块和块名的详细介绍在Verilog中,模块是基本的组织单元,模块中包含了多个块,块是Verilog中的基本执行单元。其中,顺序块、并行块是常用的语言特性,用于控制代码的执行顺序和组织代码结构。本文将介绍Verilog中的顺序块、并行块和块名的基础知识。https://mp.weixin.qq.com/s?__biz=MzIyMzQ5MTY4OQ==&mid=2247485761&idx=4&sn=ff225cb5b93f05c51f7f916f35830011&chksm=e81c2a47df6ba351cf09d00a151cdc50e1c3ce69b341b11e3aa26b5e813bd1bc405485e06873#rd

Verilog是一种硬件描述语言,用于FPGA(现场可编程门阵列)的设计。在Verilog中,模块是基本的组织单元,模块中包含了多个块,块是Verilog中的基本执行单元。其中,顺序块、并行块是常用的语言特性,用于控制代码的执行顺序和组织代码结构。本文将介绍Verilog中的顺序块、并行块和块名的基础知识。

1. 顺序块

顺序块是Verilog中的一种基本结构,用于按照书写顺序依次执行语句。顺序块的语法如下:

always @ (posedge clk) begin

    // 顺序块语句

    语句1;

    语句2;

    ......

    语句n;

end

在上面的代码中,使用“always”关键字定义了一个时序块(顺序块),其中“@(posedge clk)”表示在时钟上升沿时执行,当时钟信号(clk)上升沿到来时,会执行begin和end之间的语句。顺序块中的语句按照书写顺序依次执行,可以用于控制状态机的状态转移、寄存器的更新等操作。

块名即该块的名字,一个标识名。其作用后面再详细介绍。

块内声明语句可以是参数声明语句、reg型变量声明语句、integer型变量声明语句、real型变量声明语句。

顺序块特点:

  1. 块内的语句是按照书写顺序执行依次执行语句,即只有上面一条语句执行完后下面的语句才能执行。
  2. 每条语句的延迟时间是相对于前一条语句的仿真时间而言的。
  3. 直到最后一条语句执行完,程序流程控制才跳出该语句块。
  4. 适用于控制状态机的状态转移、寄存器的更新等操作。

2. 并行块

并行块是Verilog中的另一种基本结构,用于并行执行多条语句。并行块的语法如下:

always @ (*) begin

    fork

        // 并行块语句

        语句1;

        语句2;

        语句n;

    join

end

在上面的代码中,使用“fork”关键字定义了一个并行块,其中的语句可以并行执行,使用“join”关键字表示并行块的结束。当任何一个输入信号发生变化时,会执行begin和end之间的语句。并行块中的语句可以并行执行,可以用于实现多个逻辑操作,例如计算、比较等。

fork join块内,各条语句不必按顺序给出,因此在并行块里,各条语句在前还是在后是无关紧要。

块名即标识该块的一个名字,相当于一个标识符。

块内说明语句可以是参数说明语句、reg型变量声明语句、integer型变量声明语句、real型变量声明语句、time型变量声明语句、事件(event)说明语句。

并行块特点:

  1. 块内语句是同时执行的,即程序流程控制一进入到该并行块,块内语句则开始同时并行地执行。
  2. 块内每条语句的延迟时间是相对于程序流程控制进入到块内时的仿真时间。
  3. 延迟时间是用来给赋值语句提供执行时序的。
  4. 当按时间时序排序在最后的语句执行完后或一个disable语句执行时,程序流程控制跳出该程序块。
  5. 由于可以并行执行多条语句,适用于实现多个逻辑操作,例如计算、比较等。

3. 块名

块名是Verilog中的一个特性,块名的作用是用于引用一个块,并方便代码的编写和阅读。块名的语法如下:

my_block: begin

  // 块语句

end

在上面的代码中,使用“:”符号定义了一个名为“my_block”的块,可以在其他地方引用该块。例如,可以在其他块中使用“my_block”引用该块,如下所示:

always @ (posedge clk) begin

  my_block;

end

在上面的代码中,当时钟信号(clk)上升沿到来时,会执行my_block中的语句。块名可以用于组织代码结构,方便代码的编写和阅读。

在VerilgHDL语言中,可以给每个块取一个名字,只需将名字加在关键词begin或fork后面即可。这样做的原因有以下几点:

  1. 可以在块内定义局部变量,即只在块内使用的变量。
  2. 可以允许块被其它语句调用,如被disable语句。
  3. 在Verilog语言里,所有的变量都是静态的,即所有的变量都只有一个唯一的存储地址,因此进入或跳出块并不影响存储在变量内的值。

基于以上原因,块名就提供了一个在任何仿真时刻确认变量值的方法。

casez语句用来处理不考虑高阻值z的比较过程,casex语句则将高阻值z和不定值都视为不必关心的情况。

 

如果用到if语句,最好写上else项。如果用case语句,最好写上default项。遵循上面两条原则,就可以避免发生这种错误,使设计者更加明确设计目标,同时也增强了Verilog程序的可读性。

综上所述,顺序块、并行块和块名是Verilog中常用的语言特性。顺序块按照书写顺序依次执行,而并行块可以并行执行多条语句。块名可以用于引用块,方便代码的编写和阅读。在FPGA设计中,需要根据具体的场景选择合适的块类型,以实现预期的功能。

SteveRocket的博客_CSDN博客-Python进阶,Django进阶,C进阶领域博主SteveRocket擅长Python进阶,Django进阶,C进阶,等方面的知识https://blog.csdn.net/zhouruifu2015/


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

推荐阅读:

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号