完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>
标签 > Verilog HDL
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。
以模块为基础的设计
描述复杂的硬件电路,设计人员总是将复杂的功能划分为简单的功能,模块是提供每个简单功能的基本结构。设计人员可以采取“自顶向下”的思路,将复杂的功能模块划分为低层次的模块。这一步通常是由系统级的总设计师完成,而低层次的模块则由下一级的设计人员完成。自顶向下的设计方式有利于系统级别层次划分和管理,并提高了效率、降低了成本。“自底向上”方式是“自顶向下”方式的逆过程。
使用Verilog描述硬件的基本设计单元是模块(module)。构建复杂的电子电路,主要是通过模块的相互连接调用来实现的。模块被包含在关键字module、endmodule之内。实际的电路元件。Verilog中的模块类似C语言中的函数,它能够提供输入、输出端口,可以实例调用其他模块,也可以被其他模块实例调用。模块中可以包括组合逻辑部分、过程时序部分。例如,四选一的多路选择器,就可以用模块进行描述。它具有两个位选输入信号、四个数据输入,一个输出端,在Verilog中可以表示为:
module mux (out, select, in0, in1, in2, in3);output out;input [1:0] select;input in0, in1, in2, in3;//具体的寄存器传输级代码endmodule
设计人员可以使用一个顶层模块,通过实例调用上面这个模块的方式来进行测试。这个顶层模块常被称为“测试平台(Testbench)”。为了最大程度地对电路的逻辑进行功能验证,测试代码需要尽可能多地覆盖系统所涉及的语句、分支、条件、路径、触发、状态机状态,验证人员需要在测试平台里创建足够多的输入激励,并连接到被测模块的输入端,然后检测其输出端的表现是否符合预期(诸如SystemVerilog的硬件验证语言能够提供针对验证专门优化的数据结构,以随机测试的方式进行验证,这对于高度复杂的集成电路设计验证可以起到关键作用)。实例调用模块时,需要将端口的连接情况按照这个模块声明时的顺序排列。这个顶层模块由于不需要再被外界调用,因此没有输入输出端口:
module tester;reg [1:0] SELECT;reg IN0, IN1, IN2, IN3;wire OUT;mux my_mux (OUT, SELECT, IN0, IN1, IN2, IN3); //实例调用mux模块,这个实例被命名为my_muxinitial //需要仿真的激励代码 begin endendmodule
在这个测试平台模块里,设计人员可以设定仿真时的输入信号以及信号监视程序,然后观察仿真时的输出情况是否符合要求,这样就可以了解设计是否达到了预期。
示例中的对模块进行实例引用时,按照原模块声明时的顺序罗列了输入变量。除此之外,还可以使用或者采用命名端口连接的方式。使用这种方式,端口的排列顺序可以与原模块声明时不同,甚至可以不连接某些端口:
mux my_mux (.out(OUT), .select(SELECT), .in0(IN0), .in1(IN1), .in2(IN2), .in3(IN3));//使用命名端口连接,括号外面是模块声明时的端口,括号内是实际的端口连接//括号外相当于C语言的形式参数,括号内相当于实际参数endmodule
上面所述的情况是,测试平台顶层模块的测试变量直接连接了所设计的功能模块。测试平台还可以是另一种形式,即测试平台并不直接连接所设计的功能模块,而是在这个测试平台之下,将激励模块和功能模块以相同的抽象级别,通过线网相互连接。这两种形式的测试平台都可以完成对功能模块的测试。大型的电路系统,正是由各个层次不同模块之间的连接、调用,来实现复杂的功能的。
Verilog HDL 快速入门
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),它是以文本形式来描述数字系统硬件的结构和行为的语言。 世界上最流行的两种硬件描述语言是Verilog HDL和VHDL。
注意,VerilogHDL是一种描述语言,它和常见的编程语言C有根本的不同。C语言,让计算机的CPU从上往下按顺序执行每一条指令,执行完程序就结束了。
而,VerilogHDL主要是描述了一个数字模块的结构,或者行为。有点像商业合同,合同里面也会描述产品的结构,产品的功能等等。合同的每一个条款,并不需要严格的先后顺序,只要把项目的方方面面都考虑完整,写下来就OK了。VerilogHDL也是这样。
我们用VerilogHDL描述数字模块的功能,剩下的交给编译器(如,Quartus),编译器会根据我们的要求设计重构FPGA内部硬件。对于大批懒人来说,这技术简直碉堡了。这就是EDA(Electronic Design Automation,电子设计自动化)。
好,下面就来认识一下VerilogHDL
我们先设计一个“数据选择器”:
s是数据选择控制端,
a,b是输入信号,y是输出信号
代码如下:
module mux2_1(a, b, s, y); //模块名、模块接口名
input a, b, s; // 定义输入端口
output y; // 定义输出端口
/* s为0时,选择a输出;
s为1时,选择b输出。*/
assign y = (s == 0) ? a : b; //输出信号
endmodule12345678
每个Verilog文件中都有一个module 开始,endmodule 结束的代码块。
这个代码块的定义了一个名字叫 mux2_1 的模块,模块名后面紧跟的括号内写明了该模块的接口信号,相当于数字器件的引脚。
但是括号内没有说明接口的信号方向,所以紧跟着另起一行用input 和output 再说明一下。注释和C语法一样,可以用// 或 /* */ 。
assign 是Verilog的关键词,书上称为连续赋值。我一般把他视为“连线”操作,assign后面的紧跟的 y 在硬件上是一根导线(或输出引脚)。
assign y = (s == 0) ? a : b;
这句话的意思是:s如果为0,那么等号左边就是a,否则就是b。将这个表达式的输出结果接在输出引脚 y 上。
这就是一个简单的Verilog程序,不需要我们去设计与非门,直接表达你的你想要的功能就好了。然后,编译下载到FPGA,功能就实现了。
要注意的是,assign 后面永远跟着一个 =,它们是一起使用的。
即,assign xx = zz;
上面的2选1数据选择器,内部实现结构如下:
所以,上面的assign语句还可以这样写,直接使用逻辑表达式:
assign y = (a & (~ s)) | (b & s);
这个是在门级对逻辑关系进行描述,所以不属于行为描述,算是结构描述吧。下面这种描述方式,叫做门原语,算结构描述。这里的关键词wire 表示电路中的导线(信号线)。
module mux2_1(a, b, s, y);
input a, b, s;
output y;
wire ns, as, bs;
not(ns, s);//这里使用了一个非门,输出是ns,输入是s
and(as, a, ns);//使用一个与门,输出as,输入a和ns
and(bs, b, s);//使用与门,输出bs,输入b和s
or(y, as, bs);//使用或门,输出y,输入as和bs
endmodule12345678910
看,这是告诉我们电路中有什么元器件,又是怎么连接的,所以这个属于结构描述。
很明显,有时候结构描述比行为描述要费力得多,而且不太容易理解程序功能。
另外,上面的这个程序中,这4个逻辑门的顺序,可以随便写,不用管先后顺序。
这个数据选择器,还可以使用如下行为描述方法:
module mux2_1(a, b, s, y);
input a, b, s;
output y;
reg y; //reg 表示寄存器
always @(a, b, s)
begin
if(!s) y = a;
else y = b;
end
endmodule1234567891011
这里reg表示寄存器(存储器),需要提醒一下的是,assign后面只能接wire型,不能接reg型。(当然output从物理上也是wire)
为什么不能?因为寄存器的赋值除了需要输入信号,还需要触发信号(例如D触发器寄存器),assign?sorry,he can’t。
always @(a, b, s)中,括号里面的输入信号a,b,s表示敏感信号。
always @( ) 是连在一起使用的。
这句话的意思是,敏感信号列表中的任何一个信号发生变化,将会引发
begin …… end 之间的行为。
Verilog用begin和end包围代码段,相当于c语言中的大括号{ }的功能。
if(!s) y = a;
这里的“=”单独使用,叫做“阻塞赋值”。我把他理解为“串行赋值”。
比如,有这么一段代码:
b=a;
c=b;
那么最后,c的值就等于a,这个行为在描述的时候,语句的先后顺序,决定了赋值的先后。
在Verilog中,和它对应的还有一个“非阻塞赋值”,表示方法是 《=,我把这种赋值称为“并行赋值”。具体区别,请参考另一篇短文阻塞赋值和非阻塞赋值。
Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完...
2023-12-07 标签:fpgaVerilogVerilog HDL 2660 0
prj为工程文件存放目录;rtl为verilog可综合代码存放目录;tb为测试文件存放目录;image为设计相关图片存放目录;doc为设计相关文档存放目...
2023-01-10 标签:fpgaFPGA芯片Verilog HDL 503 0
Verilog HDL是一种用于数字系统设计的语言。用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型也称为模块。Verilo...
2022-12-08 标签:fpgaVerilogVerilog HDL 2661 0
今天给大侠带来的是一周掌握FPGA Verilog HDL 语法,今天开启第二天。上一篇提到了整数型以及参数型,此篇我们继续来看变量以及后续其他内容,结...
2022-07-18 标签:fpga变量Verilog HDL 1576 0
一、HDL的概念和特征 HDL,Hard Discrimination Language的缩写,翻译过来就是硬件描述语言。那么什么是硬件描述语言呢?为什...
2020-10-21 标签:fpgaIC设计Verilog HDL 4370 0
基于FPGA的SOC在嵌入式系统应用越来越广了,往往一个复杂系统使用一个单芯片基于FPGA的SOC就搞定了。比较流行的方案主要有Altera/xilin...
2020-09-01 标签:C语言Verilog HDL 4351 0
Verilog HDL的程序结构_veriloghdl的关键字
首先我们不开始讲Verilog HDL的语法,我们从Verilog HDL的程序结构出发。相信大家都看过芯片吧,它有个名字,有个外壳,外壳向外伸出有引脚...
2020-08-27 标签:VerilogVerilog HDL 2472 0
HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 ...
2020-08-26 标签:vhdlVerilog HDL 6.2万 0
类别:电子资料 2023-11-08 标签:fpgaofdmVerilog HDL
类别:电子资料 2023-11-08 标签:fpga函数Verilog HDL
类别:电子资料 2023-08-29 标签:Verilog HDL硬件描述语言
在Verilog HDL中使用分频器的8位计数器的设计立即下载
类别:电子资料 2023-06-15 标签:fpga计数器Verilog HDL
类别:电子资料 2023-02-10 标签:vhdlVerilog HDL
Verilator高性能Verilog HDL模拟器与lint系统立即下载
类别:电子资料 2022-04-14 标签:C++模拟器Verilog HDL
Verilog HDL入门教程-Verilog HDL的基本语法立即下载
类别:FPGA/ASIC 2022-01-07 标签:Verilog HDL
类别:C语言|源代码 2021-08-13 标签:编程Verilog HDL
类别:VHDL/Verilog/EDA源码 2021-05-06 标签:仿真Verilog HDL
Verilog HDL的礼物-Verilog HDL扫盲文下载立即下载
类别:FPGA/ASIC 2021-04-30 标签:FPGAVerilog HDL
标识符可以是一组字母、数字、下划线和$符号的组合,且标识符的第一个字符必须是字母或者下划线。
2022-07-04 标签:寄存器运算符Verilog HDL 1322 0
原文标题:非常详细的Verilog讲义教程 文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。 审核编辑:彭静
2022-07-04 标签:软件Verilog HDL 778 0
Verilog HDL 优点:类似C语言,上手容易,灵活。大小写敏感。在写激励和建模方面有优势。 缺点:很多错误在编译的时候不能被发现。 VHDL 优点...
Verilog HDL verilog hdl和vhdl的区别
Verilog HDL是一种以文本形式描述数字系统硬件的结构和行为的硬件描述语言,也可描述逻辑电路图、逻辑表达式等。Verilog HDL和VHDL是目...
2021-07-23 标签:VHDLVerilog HDL 1.1万 0
Verilog HDL中定义的26个有关门级的关键字中常用的有哪些?
1、结构描述形式 从电路结构的角度来描述电路模块,称为结构描述形式。 Verilog HDL中定义了26个有关门级的关键字,比较常用的有8个: and ...
2021-07-02 标签:Verilog HDL 2994 0
基于Verilog HDL描述语言实现交通灯系统控制器的设计
EDA技术是依靠功能强大的电子计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Description Language)为系...
2020-07-21 标签:交通灯系统控制器Verilog HDL 7994 0
通常设计数字电路大都采用自顶向下将系统按功能逐层分割的层次化设计方法,这比传统自下向上的EDA设计方法有更明显的优势(当时的主要设计文件是电路图)。因为...
2020-07-20 标签:fpgaedaVerilog HDL 1996 0
在数字信号的传输过程中,有时需要从多路输入数据中选出某一路数据,完成此功能的逻辑器件称为数据选择器,即所谓多路开关,简称MUX(Multiplexer)...
2020-07-20 标签:Verilog HDL多路选择器 4613 0
电子发烧友网核心提示: 本例程是Verilog HDL源代码:关于基本组合逻辑功能中7段译码器的功能实现源代码。注意:程序运行在不同软件平台可能要作一些...
2012-10-15 标签:译码器Verilog HDLHDL源代码 2.3万 0
编辑推荐厂商产品技术软件/工具OS/语言教程专题
电机控制 | DSP | 氮化镓 | 功率放大器 | ChatGPT | 自动驾驶 | TI | 瑞萨电子 |
BLDC | PLC | 碳化硅 | 二极管 | OpenAI | 元宇宙 | 安森美 | ADI |
无刷电机 | FOC | IGBT | 逆变器 | 文心一言 | 5G | 英飞凌 | 罗姆 |
直流电机 | PID | MOSFET | 传感器 | 人工智能 | 物联网 | NXP | 赛灵思 |
步进电机 | SPWM | 充电桩 | IPM | 机器视觉 | 无人机 | 三菱电机 | ST |
伺服电机 | SVPWM | 光伏发电 | UPS | AR | 智能电网 | 国民技术 | Microchip |
开关电源 | 步进电机 | 无线充电 | LabVIEW | EMC | PLC | OLED | 单片机 |
5G | m2m | DSP | MCU | ASIC | CPU | ROM | DRAM |
NB-IoT | LoRa | Zigbee | NFC | 蓝牙 | RFID | Wi-Fi | SIGFOX |
Type-C | USB | 以太网 | 仿真器 | RISC | RAM | 寄存器 | GPU |
语音识别 | 万用表 | CPLD | 耦合 | 电路仿真 | 电容滤波 | 保护电路 | 看门狗 |
CAN | CSI | DSI | DVI | Ethernet | HDMI | I2C | RS-485 |
SDI | nas | DMA | HomeKit | 阈值电压 | UART | 机器学习 | TensorFlow |
Arduino | BeagleBone | 树莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 华秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |