随笔分类 -  Verilog

FSM从一段到三段详解
摘要:一段式:将整个状态机写到1个always模块里,在该模块中既描述状态转移,又描述状态的输入和输出。(always用时序逻辑也就非阻塞赋值)解释:无须解释特点:一段式描述方法不符合将时序和组合逻辑分开描述的Coding Style(代码风格),而且代码冗长、不清晰,不利于附加约束,不利于综合器和布局布... 阅读全文

posted @ 2014-10-21 18:49 fkl523 阅读(1048) 评论(0) 推荐(0)

Testbench中阻塞赋值与非阻塞赋值
摘要:1 module test(); 2 reg a; 3 reg b; 4 reg c; 5 initial begin 6 a=1'b0; 7 b=1'b0; 8 c=1'b1; 9 10 #1011 a=1'b1;12 b=#5 1'b1;13 c=1'b0;14... 阅读全文

posted @ 2014-10-16 18:36 fkl523 阅读(1699) 评论(0) 推荐(0)

TimeQuest学习之一------核心内容学习
摘要:Tclk1:时钟路径延迟 Tco:寄存器更新延迟 Tdata:数据路径延迟 Tclk2:时钟路径延迟 Tsu:寄存器建立时间1,建立时间:图1:TimeQuest求建立余量示意图则,数据到达reg2的时间为:launchedge+Tclk1+Tco+Tdata=0+3.2ns+0.8ns=4... 阅读全文

posted @ 2014-09-28 16:20 fkl523 阅读(381) 评论(0) 推荐(0)

一路艰辛调试特权同学Verilog读写SDRAM实验,终于通了。
摘要:今年过完年回到学校,大概二月19日,开始调SDRAM这个实验,目的是想做最后的那个数码相框的项目。特权使用的SDRAM是三星的K4S641632(64M),而我板子上是海力士的H57V1262GTR(128M),由于不知道二者时序是否兼容,于是乖乖的按照特权的建议,仔仔细细的把《SDRAM-高手... 阅读全文

posted @ 2014-08-23 13:16 fkl523 阅读(4961) 评论(0) 推荐(0)

Verilog的碎碎念(持续更新)
摘要:1、在边沿敏感的always进程中,不是不能阻塞非阻塞混用,而是应当少用,那么什么时候应该混用呢? 答:如果在同一进程中,下面的非阻塞赋值需要用到上面的值,且要求是本时钟沿更新的“新值”,那么上面的赋值语句必须用阻塞赋值。单纯的非阻塞赋值语句如: begin out_1<=input; out_2<=out_1; end其中,out_2获得的是上一个时钟沿out_1的值,也即:out_2总是晚out_1一个时钟周期。2、reg [3:0]A [4:0]为何意? 答:建立5个4位宽的A,A[4][3]表示第5个A的第3位(最高位)。3、端口类型,及声明注意事项: 在... 阅读全文

posted @ 2013-12-31 11:07 fkl523 阅读(580) 评论(0) 推荐(0)

基于FIFO的串口发送机设计
摘要:选题缘由:前几天在黑金时序篇的陪伴下,对FIFO进行了大致的掌握,今天看特权同学的深入浅玩转FPGA进阶实验五:基于FIFO的串口发送机设计,想自己总该动手练练,总看别人的code也能学到东西,但那终究不是自己的,当自己独自面对时,会冒出不少原本看似没有问题的问题。可喜的是这次竟然没遇到多大困难,一个小时多一点写好代码,解决问题不到十分钟,然后搞定!难道自己水平有所提高了,哈哈! 本实验RTL图: 本实验实现如下功能:Data_gene模块每隔1s产生一个递增的8位数(在助手里边以16进制方式显示),然后每隔1s wrreq发送一个高电平,写入FIFO,本实验FIFO采用8 wide,... 阅读全文

posted @ 2013-11-14 10:02 fkl523 阅读(2253) 评论(1) 推荐(0)

流水线方式LUT查表法乘法器
摘要:流水线利用非阻塞赋值赋予的是上一时钟周期寄存器的值,来实现对寄存器的依次更新值。如:always @ ( posedge CLK )begin//A[m]表示,一维数组A 中第m 个元素。//A[m][n]表示,一维数组A 中第m 个元素,第n 位。A[0] start->StartTestBench Template Writer时,前提要在设置中设置好仿真工具Modelsim Altera,才能进行模版的生成。 收获:模版生成貌似挺有用的说,利用模版里边的端口映射模块,可以很简单的用在模块例化的端口映射中,这在端口量很大的工程中很能提高效率。O(∩_∩)O哈哈~ 3、用Models. 阅读全文

posted @ 2013-11-07 16:43 fkl523 阅读(1430) 评论(0) 推荐(0)

verilog中有符号整数说明及除法实现
摘要:1、以8位短整数为例,短整数的最高位是符号位,符号位的正负表示了该值是“正还是负”?。正值的表示方法是以0开始的8位二进制数,反之负值的表示方法是用正数的补码来表示。例如:+127 亦即8'b0111_1111;那么-127 亦即8'b1000_0001(通过相应正数的按位取反加1得到,符号位也要取反); 2、正值可以进行求反又加一之后成为负值。那么负值如何变成正值?同样的一个道理“负值求反又加一后,成为正值”。 3、我们知道短整数的位宽为,8 ,亦即取值范围是0~255。但是符号位的出现吃掉了最高位,所以造成取值范围变成2^7=128,即0到127。 4、在Modelsim中 阅读全文

posted @ 2013-11-05 14:11 fkl523 阅读(8322) 评论(1) 推荐(0)

LUT查表法乘法器所犯下错误。。。。
摘要:程序参见黑金时序篇一章实验五LUT查表法实验,不同的是LUT我用了一个ROM来实现,word depth 256,word size 16,数据用matlab生成,发现matlab确实好强大,不用操作文件,直接在查看数组的值即可将一堆所需的数据复制出来。最终将问题解决,不是大问题,但力求每次都能从中学到些什么。 各模块建立初始出现了以下错误: 1、Error: Can't synthesize current design,Top partition does not contain any logic 2、Warning: Synthesized away the followin. 阅读全文

posted @ 2013-11-05 08:48 fkl523 阅读(2718) 评论(0) 推荐(0)

Verilog的序列信号检测器实现及其testbench仿真
摘要:终于迈向了testbench的学习,第一个就拿简单的练练手,没想这都遇到了好几个问题,在一番折腾下,终于把问题调试完毕,趁热乎过来写下本人的第一篇博客。。序列信号检测器对串行输出进行检测,如果检测到连续的1001,则输出1,否则输出0。 程序采用两段式状态机写法。两段式状态机即:用两个always模块来描述状态机,其中一个always模块采用同步时序描述状态转移,另外一个模块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出。状态机编码方式采用独热码方式,《Verilog数字系统设计与FPGA应用》【赵倩、林丽萍】一书中说:“CPLD器件更多地提供组合逻辑资源,而FPGA器件更多的提... 阅读全文

posted @ 2013-11-03 20:46 fkl523 阅读(5193) 评论(0) 推荐(1)

导航