![](https://img-blog.csdnimg.cn/20210310151622554.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Verilog基础
文章平均质量分 79
记录一些verilog的基础知识点!!!
耐心的小黑
七月份就上班了,比较忙!
展开
-
verilog中的基本数据类型
Verilog 最常用的 2 种数据类型就是线网(wire)与寄存器(reg),其余类型可以理解为这两种数据类型的扩展或辅助。一、线网(wire)wire 类型表示硬件单元之间的物理连线,由其连接的器件输出端连续驱动。如果没有驱动元件连接到 wire 型变量,缺省值一般为 “Z”。举例如下:wire interrupt ;wire flag1, flag2 ;wire gnd = 1'b0 ; 线网型还有其他数据类型,包括 wand,wor,wri,triand,trior,tr转载 2021-06-19 10:45:12 · 8549 阅读 · 0 评论 -
verilog generate语法总结
一、语法介绍generate语句允许细化时间(Elaboration-time)的选取或者某些语句的重复。这些语句可以包括模块实例引用的语句、连续赋值语句、always语句、initial语句和门级实例引用语句等。细化时间是指仿真开始前的一个阶段,此时所有的设计模块已经被链接到一起,并完成层次的引用。1、定义genvar,作为generate中的循环变量。2、generate语句中定义的for语句,必须要有begin,为后续增加标签做准备。3、begin必须要有名称,也就是必须要有标签,因为标签会作转载 2021-03-27 12:17:53 · 4163 阅读 · 1 评论 -
verilog 中的可综合与不可综合
参考链接:https://blog.csdn.net/qq_26652069/article/details/92790862https://blog.csdn.net/woshiyuzhoushizhe/article/details/83614856一、什么是综合?Verilog HDL或VHDL都只是一种硬件的描述语言,并且允许在不同的抽象层次上对电路进行建模。VerilogHDL侧重于电路级,可以在门级和寄存器传输级(RTL)描述硬件,也可以在算法级对硬件加以描述。而VHDL侧重于系统级。转载 2020-10-17 17:18:41 · 19294 阅读 · 0 评论 -
verilog中task与function语句的使用
一、四位二进制全加器的function形式实现:module full_adder_4(A,B,CIN,S,COUT); input[3:0] A; input[3:0] B; input CIN; output[3:0] S; output COUT; wire[3:0] S0,S1,S2,S3; function signed[1:0] ADD; //port declaration input A; input B; input CIN; //inte原创 2020-09-23 23:56:40 · 3597 阅读 · 0 评论 -
Moore状态机和Mealy状态机的区别(以序列检测器为例)
一、Moore状态机设计一个序列检测器,检测序列1101,检测到输出1,否则输出0.`timescale 1ns / 1ps module seq_det_moore( input clk, input reset, input din, output reg dout ); //状态声明 localparam [2:0] s0 = 3'b000, s1 = 3'b001, s2 = 3'b010, s3 = 3原创 2020-09-23 23:29:31 · 3296 阅读 · 0 评论 -
verilog 有限状态机的基本概念和三种写法介绍
“硬件设计很讲究并行设计思想,虽然用Verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机思想。什么是状态机呢?简单的说,就是通过不同的状态迁移来完成一些特定的顺序逻辑。硬件的并行性决定了用Verilog描述的硬件实现(臂如不同的always语句)都是并行执行的,那么如果希望分多个时间完成一个任务,怎么办?也许可以用多个使能信号来衔接多个不同的模块,但是这样做多少显得繁琐。状态机的提出会大大简化这一工作。”——特权同学《深入浅出玩转F转载 2020-09-23 23:19:12 · 6178 阅读 · 0 评论 -
verilog中testbench仿真时钟的生成
一、普通时钟信号:1、基于initial语句的方法:parameter clk_period = 10; reg clk; initial begin clk = 0; forever #(clk_period/2) clk = ~clk; end 2、基于always语句的方法:parameter clk_period = 10; reg clk; initial clk = 0; always #(clk_per原创 2020-09-23 10:57:56 · 21341 阅读 · 3 评论 -
verilog中wire和reg类型的区别
一、基本概念wire型数据常用来表示以assign关键字指定的组合逻辑信号,模块的输入输出端口类型都默认为wire型,wire相当于物理连线,默认初始值是z。reg型表示的寄存器类型,用于always模块内被赋值的信号,且必须定义为reg型,代表触发器,常用于时序逻辑电路,reg相当于存储单元,默认初始值是x。二、深入理解1、从仿真角度来说,HDL语言面对的是编译器,相当于使用软件思路,此时:wire对应于连续赋值,如assign;reg对应于过程赋值,如always,initial;原创 2020-09-21 21:41:33 · 8977 阅读 · 0 评论 -
verilog的结构化、数据流、行为级描述方式
一、前言verilog通常可以使用三种不同的方式描述模块实现的逻辑功能:结构化描述方式: 是使用实例化低层次模块的方法,即调用其他已经定义过的低层次模块对整个电路的功能进行描述,或者直接调用Verilog内部预先定义的基本门级元件描述电路的结构。数据流描述方式: 是使用连续赋值语句(assign)对电路的逻辑功能进行描述,该方式特别便于对组合逻辑电路建模。行为级描述方式: 是使用过程块语句结构(always)和比较抽象的高级程序语句对电路的逻辑功能进行描述。二、举例要实现的逻辑功转载 2020-09-21 19:45:03 · 5280 阅读 · 0 评论 -
verilog中initial语句的基本使用
所有的initial语句内的语句构成了一个initial块。initial块从仿真0时刻开始执行,在整个仿真过程中只执行一次。如果一个模块中包括了若干个initial块,则这些initial块从仿真0时刻开始并发执行,且每个块的执行是各自独立的。如果在块内包含了多条行为语句,那么需要将这些语句组成一组,一般式使用关键字begin和end将他们组合在一个块语句;如果块内只有一条语句,则不必使用begin和end.下面通过一个简单的例子来感受一下initial语句的执行方式:module initial_t原创 2020-09-21 19:29:04 · 19231 阅读 · 6 评论 -
verilog中阻塞与非阻塞赋值形象理解
一、阻塞赋值阻塞赋值,顾名思义,即在一个always块中,后面的语句会受到前语句的影响,具体来说,在同一个always中,一条阻塞赋值语句如果没有执行结束,那么该语句后面的语句就不能被执行,即被“阻塞”。也就是说always块内的语句是一种顺序关系,这里和C语言很类似。比如,在C语言中,b=a;c=b;执行的时候就是先执行第一句b=a,然后执行下一句c=b,最后结果是a=c。同样,在时钟沿触发下,always块内,阻塞赋值也是顺序执行,如下代码:always@(posedge clk) beg转载 2020-09-21 19:01:32 · 2192 阅读 · 0 评论