VerilogHDL always时序电路上升沿怎么用触发,begin end中的语句每个上升沿怎么用都全部执行一遍吗

语法格式:模块名 <参数值列表> 示唎名(端口名列表)

当一个模块在当前模块被调用多次其语法格式为:

当定义的模块为标量时,若对其进行矢量调用语法格式为:

c)不同端口位宽的匹配

当端口和端口的表达式位宽不一致时,会进行端口的匹配

使用带有参数的模块实例语句修改参数值,语法格式为:模块洺 <参数值列表> 调用名(端口名列表)

使用定义参数语句(defparam)修改参数值语法格式为:

(1)基本门级元件类型

最多输入信号不能超过9

3、开关級建模(区别于VHDL的特点)

我们会继续上传新书《自己动手寫处理器》(未公布)今天是第七章,我每星期试试4

      Verilog定义的模块一般包含有过程语句过程语句有两种:initial、always。当中initial经常使用于仿真中的初始化当中的语句仅仅运行一次,而always中语句则是不断反复运行的此外,always过程语句是可综合的initial过程语句是不可综合的。

      always过程语句一般昰带有触发条件的触发条件写在敏感信号表达式中。敏感信号表达式又称为事件表达式或敏感信号列表当该表达式中变量的值改变时。就会引发当中语句序列的运行

因此。敏感信号表达式中应列出影响块内取值的全部信号

      假设有两个或两个以上的敏感信号时,它们の间使用“or”连接此处还是以32位加法器为例,2.4节是使用assign直接赋值的事实上也能够使用always过程语句实现,例如以下

仅仅要被加数in1、加数in2Φ的不论什么一个改变,都会触发always过程语句在当中进行加法运算。这里有两个敏感信号in1、in2使用“or”连接。


      敏感信号列表中的多个信号吔能够使用逗号隔开上面的32位加法器能够改动为例如以下形式。


      敏感信号列表也能够使用通配符“*”表示在该过程语句中的全部输入信号变量,上面的32位加法器能够改动为例如以下形式

always @ (*) //使用通配符表示过程语句中的全部输入信号变量

      敏感信号能够分为两种类型:一种為电平敏感型,一种为边沿敏感型前一种一般相应组合电路,如上面给出的加法器的样例后一种一般相应时序电路。对于时序电路敏感信号一般是时钟信号,Verilog HDL提供了posedge、negedge两个keyword来描写叙述时钟信号posedge表示以时钟信号的上升沿怎么用作为触发条件,negedge表示以时钟信号的下降沿莋为触发条件还是以32位加法器为例。能够为其加入一个时钟同步信号例如以下。

      在时钟信号的上升沿怎么用才会进行加法运算,这┅点与前面的加法器不同也就是当被加数in1、加数in2变化时。并不会马上改变输出out而是要等待时钟信号的上升沿怎么用。

      initial过程语句不带触發条件而且当中的语句序列仅仅运行一次。initial过程语句通经常使用于仿真模块中对激励向量的描写叙述或用于给寄存器赋初值。它是面姠模拟仿真的过程语句通常不能被综合。例如以下是initial过程语句的一个样例用于给存储器mem赋初值。

如上文中加法器的样例

      在always、initial过程中嘚赋值语句称为过程赋值语句。多用于对reg型变量进行赋值分为非堵塞赋值和堵塞赋值两种方式。

      非堵塞赋值在整个过程语句结束时才会唍毕赋值操作即b的值并非立马改变的。

      堵塞赋值在该语句结束时就马上完毕赋值操作即b的值在这条语句结束后立马改变。假设在一个塊语句中有多条堵塞赋值语句,那么在前面的赋值语句没有完毕之前后面的语句就不能被运行,仿佛被堵塞了一样因此称为堵塞赋徝方式。

      在always过程块中堵塞赋值能够理解为赋值语句是顺序运行的,而非堵塞赋值能够理解为赋值语句是并发运行的如图2-12所看到的。

在┅个过程块中堵塞式赋值与非堵塞式赋值仅仅能使用当中一种。

      上述格式中的“表达式”一般为逻辑表达式或关系表达式也可能是1位嘚变量。系统对表达式的值进行推断假设为0、X、Z。则按“假”处理假设为1。则按“真”处理

语句序列能够是单句。也能够是多句哆句时需使用begin-end块语句括起来。

      还是以32位加法器为例为其加入一个复位信号rst,假设rst为高电平那么复位信号有效。输出out为0反之,复位信號无效输出out为两个输入信号之和。

      相对于if-else语句仅仅有两个分支而言case语句是一种多分支语句,所以case语句多用于多条件译码电路如译码器、数据选择器、状态机及微处理器的指令译码等。其格式例如以下


      当敏感表达式的值等于“值1”时,运行语句序列1;当等于“值2”时运行语句序列2。依次类推假设敏感表达式的值与上面列出的值都不符,那么运行default后面的语句序列例如以下代码是一个简单的运算单え,可运行加法或减法运算假设输入变量type的值为1。那么运行加法运算假设type的值为0。那么运行减法运算

  •  在casez语句中,假设比較的两方某些位的值为高阻Z那么对这些位的比較结果就不予考虑,仅仅需考虑其他位的比較结果
  •  在casex语句中。假设比較的两方某些位的值为Z或X那麼对这些位的比較结果就不予考虑,仅仅需考虑其他位的比較结果
for(循环变量赋初值; 循环结束条件; 改动循环变量)

通过for循环统计赞成的人数,若超过4人(含4人)赞成则通过当中vote[7:1]表示7个人的投票情况。vote[i]为1表示第i个人投的是赞成票。反之是反对票pass是输出,超过4个人赞成pass为1,反之为0

在2.8节编写仿真用的Test Bench文件时,会给出forever语句的样例


      while语句在运行时,首先推断循环运行条件表达式是否为真若为真,则运行当中嘚语句序列然后再次推断循环运行条件表达式是否为真,若为真则再次运行当中的语句序列,如此重复直到循环运行条件表达式不為真。

      Verilog HDL和C语言一样提供了编译指示功能同意在程序中使用编译指示(Compiler Directives)语句,在编译时通常先对这些指示语句进行预处理,然后再将預处理的 结果和源程序一起进行编译

      `define能够用一个简单的名字或有意义的标识(也称为宏名)取代一个复杂的名字或变量。其格式例如以丅


      比如:一般在时序电路中会有一个复位信号,当该复位信号为高电平时表示复位信号有效当该复位信号为低电平时,表示复位信号無效分别运行不同的代码,例如以下

// 定义宏RstEnable表示复位信号有效,这个名字对读者而言更有意义


      在OpenMIPS处理器的实现过程中我们定义了非瑺多宏。这些宏都集中在文件defines.v中假设某一程序须要使用当中的宏定义,就能够在程序文件的開始使用`include语句将defines.v文件包括进来就可以例如鉯下。

当指定的宏在程序中已定义那么当中的语句序列參与源文件的编译,否则当中的语句序列不參与源文件的编译。

当指定的宏在程序中已定义那么当中的语句序列1參与源文件的编译,否则当中的语句序列2參与源文件的编译。

2.6.6 行为语句的可综合性

      前面几小节介绍叻Verilog HDL中的多种行为语句包含过程语句、赋值语句、条件语句、循环语句、编译指示语句。全部的语句都能在仿真中使用可是有些语句是鈈可综合的。也就是说综合器无法将这些语句转变为相应的硬件电路

Verilog HDL行为语句可综合性的情况如表2-4所看到的。

版权声明:本文博客原创攵章博客,未经同意不得转载。

我要回帖

更多关于 上升沿怎么用 的文章

 

随机推荐