Verilog 语法介绍 4

#记录一些语法、概念、编译方法#

目录

iverilog 编译参数:

iverilog进行多文件编译:

gtkwave wave.vcd 

.tcl

verilog  如何debug

latch 和 Flip-flop

同步信号、异步信号

mux


iverilog 编译参数:

iverilog:用于编译verilog和vhdl文件,进行语法检查,生成可执行文件

参数 -o,这是比较常用的一个参数了,和GCC中-o的使用几乎一样,用于指定生成文件的名称。如果不指定,默认生成文件名为a.out。如:iverilog -o test test.v

参数-y,用于指定包含文件夹,如果top.v中调用了其他的的led_demo_tb.v模块,top.v直接编译会提示

led_demo_tb.v:38: error: Unknown module type: led_demo
2 error(s) during elaboration.
*** These modules were missing:
        led_demo referenced 1 times.
***

找不到调用的模块,那么就需要指定调用模块所在文件夹的路径,支持相对路径和绝对路径。
如:

iverilog  -y  D:/test/demo  led_demo_tb.v

如果是同一目录下:iverilog -y ./ led_demo_tb.v

参数-I,如果程序使用include语句包含了头文件路径,可以通过-i参数指定文件路径,使用方法和-y参数一样。
如:iverilog -I D:/test/demo led_demo_tb.v

iverilog进行多文件编译:

1. 将所有文件编译成目标文件:

使用命令:iverilog -o ...

2. 将目标文件链接成可执行文件:

使用命令:vvp

3. 如果文件之间有多级调用关系,则需要在编译和链接时加上-y参数,以指定搜索路径:

使用命令:iverilog -o -y ...

使用命令:vvp -y

gtkwave wave.vcd 

: 使用该命令打开 gtkwave 查看波形文件

.tcl

TCL(Tool Command Language)是一种由John Ousterhout创建的脚本语言,设计初衷是提供简单易用的脚本功能,并支持跨平台运行,广泛应用于自动化测试、GUI设计、网络编程和服务器端开发等领域。

C 语言仿真 Verilog

编写C语言函数,您需要使用C语言编写一个函数,该函数将在仿真期间被调用。可以使用标准C库中的函数,也可以使用外部库。

编写Verilog模块,您需要编写一个Verilog模块,该模块将调用C函数。可以使用PLI机制来声明和调用C函数。

创建一个makefile,用于编译和运行程序。您需要编写一个makefile,该文件将指定VCS编译器选项、源文件和构建目标。

编译和运行仿真,使用makefile来编译和运行仿真。这将使用VCS编译和链接源文件,并在仿真期间调用C函数。

verilog  如何debug

verilog代码如何debug – PingCode

latch 和 Flip-flop

锁存器(latch)是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,即当锁存器处于使能状态时,输出Q才会随着数据输入D发生变化。

普通的latch                        vs                           加入清0 的latch, enal_n 低电平有效

Verilog 语法介绍 4_第1张图片Verilog 语法介绍 4_第2张图片

Verilog 语法介绍 4_第3张图片

触发器(flipflop)边沿敏感的存储单元,数据存储的动作由某一信号的上升或者下降沿行同步的。(钟控D触发器其实就是D锁存器,边沿D触发器才是真正的D触发器)

  • posedge clk:表示在时钟信号 clk 的上升沿(从低电平到高电平的跳变)触发某个操作或事件。
  • negedge rstn:表示在复位信号 rstn 的下降沿(从高电平到低电平的跳变)触发某个操作或事件

Verilog 语法介绍 4_第4张图片

2、锁存器和触发器的区别

锁存器同其所有的输入信号相关,是电平触发,当输入信号变化时锁存器就变化,没有时钟端,属于异步电路设计,时序分析困难且浪费大量芯片资源。

触发器受时钟控制的边沿触发,只有在时钟触发时才采样当前的输入产生输出,当然因为锁存器和触发器二者都是时序逻辑,所以输出不但同当前的输入相关,还同上一时间的输出相关。

作用:

由于触发器内有记忆功能,因此利用触发器可以方便地构成寄存器。由于一个触发器能够存储一位二进制码,所以把n个触发器的时钟端口连接起来就能构成一个存储n位二进制码的寄存器。

同步信号、异步信号

同步信号的传输必须参照时钟信号(clk 信号),而异步信号则不然。

判断信号是否为同步传输,关键在于其是否在变为有效状态时受到时钟信号的约束,或是否需以时钟信号为基准。

同步传输模式下,输入信号与时钟信号结合,通常通过“与”或“与非”运算进行处理。仅当运算结果使信号达到有效状态时,设备才会执行后续操作或进行数据传输。

相较之下,异步传输则与时钟信号无关。一旦信号有效,设备便会立即响应并开始处理。它依赖起始位和停止位等信号来提示接收方传输的开始与结束,无需时钟信号作为时间基准。

mux

mux(Multiplexer)是一种电子和数字电路中的关键设备,主要用于从多个输入信号中选择特定信号进行传输,并将其合并为单一输出信号

你可能感兴趣的:(Verilog 语法介绍 4)