草庐IT

Verilog之串并转换

1.串行转并行1.1利用移位寄存器采用位移拼接技术,当使能信号发出时,进行移位输出(注意低位和高位先赋值表达方式不同);当使能信号无时,后续数据不发出。moduleserial_parallel(inputclk,inputrst_n,en,inputdata_i,//一位输入outputreg[7:0]data_o //8位并行输出);always@(posedgeclkornegedgerst_n)begin if(!rst_n) data_o1.2利用计数器利用计数器,每过一个周期移动一位,数据输出一位;​moduleserial_parallel(inputclk,inputrst_

Verilog HDL

一,原理(1)QuartusAlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,受到数字系统设计者的欢迎, AlteraQuartusII设计软件是业界唯一提供FPGA和固定功能HardCopy器件统一设计流程的设计工具。(2)ModelSim ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力

Verilog基础:避免混合使用阻塞和非阻塞赋值

相关阅读Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482    “避免在一个always块中混杂阻塞赋值和非阻塞赋值”,这条原则是著名的Verilog专家CliffCummings在论文SUNG2000中提出的,这个观点在公众讨论时受到了广泛的质疑。有人认为可以在时钟沿触发的always块里把组合逻辑的阻塞赋值和时序逻辑的非阻塞逻辑安全地混杂在一起。诚然,但是这种编码风格有以下几点不足。这种always块的事件调度理解起来比较费劲。这种always块内的非阻

verilog常用系统任务和函数

在FPGA开发中编写仿真测试激励文件(testbench),经常会用到verilog的系统函数,使用系统函数非常方便,本文总结了常用的系统函数,并提供了说明和使用示例。一、文件操作1、打开文件$fopen和关闭文件$fcloseintegerfp;fp=$fopen("file_path/file_name","wb");$fclose(fp);打开文件$fopen函数:第1个参数:文件路径,绝对路径和相对路径均可。第2个参数:定义含义r读操作w写操作a在文件末尾追加rb,wb,ab以二进制的方式读、写、追加,推荐方式返回值:0表示打开文件成功,非0值表示打开文件失败关闭文件$fclose:参

什么是Verilog?

什么是Verilog?        Verilog是一种以代码形式来描述数字系统和电路的硬件描述语言(HDL)。它由GatewayDesignAutomation在20世纪80年代中期开发,后来被CadenceDesignSystems收购。        Verilog广泛用于数字和混合信号系统的设计和验证,包括专用集成电路(ASIC)和现场可编程门阵列(FPGA)。它支持从结构级到行为级的一系列抽象层级,并用于基于仿真的设计和基于综合的设计。        该语言分层次级来描述数字电路,从逻辑门和触发器等最基本的元素开始,到构建更复杂的功能模块和系统。它还支持一系列建模技术,包括门级、R

verilog运算符

运算符和表达式算数运算符算数运算符说明+加-减*乘/除%求模进行整数除法运算时,结果值略去小数部分,只取整数部分;%称为求模(或求余)运算符,要求%两侧均为整型数据;求模运算结果值得符号位取第一个操作数的符号位;进行算数运算时,若操作数位不定值X,则整个结果也为xeg:x+a=x;定义一个a,b都是[1:0]两位的,b是1,c是6a=b+ca=7但是换算成二进制111但是a是两位的二进制,故a为11舍弃了最高位的1关系运算符关系运算符说明小于小于或等于>大于>=大于或等于运算结果值为1位的逻辑值1或0或x关系运算时,若关系为真,则返回值为1若声明的关系为假,则返回值为0若操作数为不定值x,则返

【HDLbits刷题笔记 】02-verilog语法-向量部分

vectors向量用于使用一个名称对相关信号进行分组,以使其更易于操作。例如,wire[7:0]w;声明一个名为w的8位向量,该向量在功能上等效于具有8个单独的导线。请注意,向量的声明将维度放在向量名称之前,这与C语法相比是不寻常的。但是,正如您所期望的那样,零件选择在矢量名称之后具有尺寸。wire[99:0]my_vector;//Declarea100-elementvectorassignout=my_vector[10];//Part-selectonebitoutofthevector构建一个具有一个3位输入的电路,然后输出相同的矢量,并将其分成三个独立的1位输出。将输出连接到输入向

FPGA——verilog实现格雷码与二进制的转换

文章目录一、格雷码简介二、二进制转格雷码三、格雷码转二进制四、仿真一、格雷码简介格雷码是一种循环二进制码或者叫作反射二进制码。跨时钟域会产生亚稳态问题(CDC问题):从时钟域A过来的信号难以满足时钟域B中触发器的建立时间和保持时间,输入与clk的变化不同步而导致了亚稳态。此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。而格雷码的每次变化位数只有一位,因此使用格雷码可以有效避免这种情况。所以格雷码常用于通信,FIFO或者RAM地址寻址计数器中。下面是典型的格雷码与二进制的转换:二、二进制转格雷码二进制转格雷

两位十进制递增/递减计数器的Verilog代码

1.一般利用按键或者拨码开关实现递增/递减控制,该计数器可以写成CNT2.递增计数到99时需要回0,而递减到0时需要回到99。3.数码管需要译码输出,且扫描显示,当显示2位数时,未使用到的数码管均要设置为不予选中(0)。4.该程序在安路EF1A650LG144开发板上验证通过,软件版本5.6.1,代码如下:moduleCNT99(CLK1Hz,CLK1KHz,DG,Q,K);inputCLK1Hz,CLK1KHz,K;//CLK1Hz为计数器时钟,CLK1KHz为数码管扫描时钟,K为计数器增减控制outputreg[7:0]Q;//段码outputreg[7:0]DG=8'b00000001;

Verilog 随机数及概率分布

随机数        Verilog中使用系统任务$random(seed)产生随机数,seed为随机数种子。seed值不同,产生的随机数也不同。如果seed相同,产生的随机数也是一样的。可以为seed赋初值,也可以忽略seed选项,seed默认初始值为0。不使用seed选项和指定seed并对其修改来调用$random的代码如下所示:  //seedvar  integer seed ;  initial begin   seed = 2 ;    #30 ;   seed = 10 ;  end  //noseed  reg [15:0]  randnum_noseed ;  always@