写在前面 在自己准备写一些简单的verilog教程之前,参考了许多资料----asic-world网站的这套verilog教程即是其一。这套教程写得极好,奈何没有中文,在下只好斗胆翻译过来(加了自己的理解)分享给大家。 这是网站原文:VerilogTutorial 这是系列导航:Verilog教程系列文章导航Verilog的抽象层级行为模型(BehavioralModels):对逻辑行为进行建模的更高级别的建模RTL模型(RTLModels):逻辑在寄存器级建模结构模型(StructuralModels):逻辑在寄存器级和门级都被建模过程块(Procedura
什么是移位寄存器移位寄存器:是指多个寄存器并排相连,前一个寄存器的输出作为下一个寄存器的输入,寄存器中存放的数据在每个时钟周期向左或向右移动一位。下面的右移移位寄存器因为左侧没有有效输入,所以在第4个时钟周期,寄存器内就已经没有有效数据了。反馈移位寄存器:寄存器被移出的数据后又通过某种方式或函数重新连接到了移位寄存器的输入端,从而使得移位寄存器有不断的输出。线性反馈移位寄存器(Linear-FeedbackShiftRegister,LFSR):当反馈移位寄存器的反馈函数为线性函数时,就称这个移位寄存器是反馈移位寄存器。LFSR所用的线性反馈函数一般为异或或者同或。在每个时钟周期,LFSR的新
名称:Quartus超声波测距设计verilog代码青创QC-FPGA开发板(文末获取)软件:Quartus语言:Verilog代码功能:超声波测距设计控制超声波测距模块,数码管显示测量结果,单位mm本代码已在青创QC-FPGA开发板验证,青创QC-FPGA开发板如下,其他开发板可以修改管脚适配:1.超声波测距原理超声波模块采用HC-SR04超声波测距模块工作原理 (1)采用IO口trig触发测距,给至少10us的高电平信号(本代码设计为15us); (2)模块自动发送8个40khz的方波,自动检测是否有信号返回; (3)有信号返回,通过IO口echo输出一个高电平,高电平持续的时间就是
目录写在前面ProceduresAlwaysblock1Alwaysblock2AlwaysifAlwaysif2AlwayscaseAlwayscase2AlwayscasezAlwaysnolatchesMoreVerilogFeaturesConditionalReductionGates100Vector100rPopcount255Adder100iBcdadd100写在前面本篇博客对 VerilogLanguage剩余两个部分的题目写完,首先对题干先读懂是关键,然后思考如何实现并验证,这里采用先对题目解读,也就是要让我们干什么,然后直接给出答案。ProceduresAlwaysbl
学习Verilog做仿真时,可选择不同仿真环境。FPGA开发环境有Xilinx公司的ISE(目前已停止更新),VIVADO;因特尔公司的QuartusII;ASIC开发环境有Synopsys公司的VCS;很多人也在用IcarusVerilog和GTKwave的方法,更加的轻便。虽然ISE或者QuartusII都会自带仿真器,但功能还是有欠缺。所以,这里介绍下QuartusII+Modelsim联合仿真的测试方法,运行环境为64bit-win10系统。QuartusII安装本次介绍使用的Quartus版本为10.1。目前QuartusII官网已经没有13.1以下版本的安装包,大家可以安装13.1
概述:原语直接操作FPGA的资源,对FPGA的结构更加清晰,使用原语之前需要对FPGA的资源进行了解,本节为初识原语学习内容1.输入缓冲原语IBUF2.输出缓冲原语OBUF3.查找表原语 LUT1.IBUF,OBUF原语简介输入输出端口必须添加缓冲后才能进入FPGA内部逻辑,用于与外部隔离。功能就是起到缓冲隔离的作用。代码IBUFb_IBUF(.I(b),.O(b_IBUF_3));OBUFc_OBUF(.I(c_OBUF_7),.O(c));结构图 2.LUT查找表简介代码一个c1=a|b逻辑功能的查找表代码如下LUT2#(.INIT(4'hE))c11(.I0(a_IBUF_1),.I1
setup hold recovery removal width period指定路径延迟,目的是让仿真的时序更加接近实际数字电路的时序。利用时序约束对数字设计进行时序仿真,检查设计是否存在违反(violation)时序约束的地方,并加以修改,也是数字设计中不可或缺的过程。Verilog提供了一些系统任务,用于时序检查。这些系统任务只能在specify块中调用。下面就介绍6种常用的用于时序检查的系统任务:$setup,$hold,$recovery,$removal,$width与$period。$setup,$hold系统任务$setup用来检查设计中元件的建立时间约束条
Verilog头文件路径指引(FPGA不积跬步101)当我们在编写Verilog代码时,我们经常需要使用头文件来创建一些常量、宏定义、函数等。但是在多个文件的情况下,如何正确的使用头文件?在Verilog中,我们可以使用include指令来引用头文件。该指令告诉编译器在编译之前将所需的头文件插入到代码中。例如:`include"my_header_file.v"这会将名为my_header_file.v的头文件插入到当前模块的代码中。但是,在使用include指令时,我们需要注意头文件的路径问题。如果头文件不在当前目录下,我们需要使用相对路径或绝对路径来指定头文件的位置。下面是一些例子:使用相
需求1:使用脉冲边沿检测法设计一个上下降沿检测功能使用脉冲边沿检测法设计一个上下降沿检测功能1,使用clk脉冲来临时pluse移位赋值preg1preg2preg1比pluse晚一个时钟,preg2比preg1晚一个时钟在利用与/非指令合并,生成上升沿的一个脉冲的r_pluser_pluse[0]r_pluse[1]2,代码实现vlg_design//*使用脉冲边沿检测法设计一个上下降沿检测功能*//`timescale1ns/1psmodulevlg_design(inputclk,//100Minputpulse,//inputrest_n,outputo_pulse_pos,//输出pl
名称:RS232接口数据发送UART串口协议Verilog代码Quartus仿真(文末获取)软件:Quartus语言:Verilog代码功能:设计RS232接口数据转发协议,将8位并行数据转发为RS232协议的串口数据发送出去。entityrs232port(clk:instd_logic;--16MHz输入时钟rdy:instdlogic;-数据准备好信号,1个时钟周期的正脉冲data:instdlogicvecton(7downto0);--要发送的并行数据bps:instdlogic_vector(Idownto0):--波特率设置00:9600bps01:1920010:38400d_