2014年3月5日

两段式状态机不可能完成的任务

摘要: 两段式状态机不可能完成的任务(特权) 最近折腾状态机,发现一个小任务对于两段式状态机写法是不可能完成的。这个小任务很简单,先看用一段式状态机实现的代码:module test( clk,rst_n, din,dout );input clk;input rst_n;input din;output[3:0] dout;parameter IDLE = 3'd0;parameter STA1 = 3'd1;//一段式写法reg[2:0] cstate;reg[3:0] cnt;always @(posedge clk or negedge rst_n) if(!rst_n) cs 阅读全文

posted @ 2014-03-05 13:26 略过天涯 阅读(741) 评论(0) 推荐(0) 编辑

很经典,逻辑电路设计经验(转)

摘要: 规范很重要 工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的。逻辑设计也是这样:如果不按规范 做的话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,更不要说检错了;如果一个项目做了一半一个人走了,接班的估计得从头 开始设计;如果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用性。在逻辑方面,我觉得比较重要的规范有这些: 1.设计必须文档化。要将设计思路,详细实现等写入文档,然后经过严格评审通过后才能进行下一步的工作。这样做乍看起来很花时间,但是从整个项目过程来看,绝对要比一上来就 阅读全文

posted @ 2014-03-05 13:25 略过天涯 阅读(1067) 评论(1) 推荐(1) 编辑

2014年3月4日

Testbench代码设计技巧

摘要: Testbench代码设计技巧" There are many ways " to code a test case, it all depens on the creativity ot the Testbench designer.Testbench代码设计技巧 11. Clock logic设计技巧 12. Asynchronous reset设计技巧 13. System task之打印数据 24. System task之生成.vcd文件 35. System task之生成vec(vector file)档 31. Clock logic为方便对时钟进行修改,已 阅读全文

posted @ 2014-03-04 20:45 略过天涯 阅读(522) 评论(0) 推荐(0) 编辑

Testbench的编写

摘要: Testbench的作用,在于给我们编写的可综合代码的模块送入激励。即在我们波形仿真中用编写testbench来代替拖拽波形。其中还包括了我们硬件仿真与matlab仿真的联调建立(将matlab产生的数据读入,或者将模块的输出写入到文本,供matlab调用检测)。对于testbench的编写的几点总结:1.利用`timescale设置仿真时间单位和时间精度。格式:`timescale时间单位/时间精度2.用localparam、parameter来定义测试模块中需要定义的常数。定义常数往往是为了使测试代码可复用,如N点的FFT可将N常数化,这样不同的N则可用相同的代码来测试。3.读取由matl 阅读全文

posted @ 2014-03-04 20:43 略过天涯 阅读(1709) 评论(0) 推荐(0) 编辑

2014年2月25日

(转)跨时钟域数据采集总结

摘要: 一.典型方法二.结绳法1.结绳法1:利用数据的边沿作时钟(例子中上升沿)。(可以将脉冲无限延长,直到可以采集到数据,然后复位,要考虑产生数据的频率)。实例1实例22结绳法2:利用数据作为异步复位,置位信号。(适合将不足时钟宽度的脉冲扩展1周期)实例1:输入高脉冲(clka域),输出高脉冲(clkb域)实例2:输入高脉冲(clka域),输出低脉冲(clkb域)实例3:输入低脉冲(clka域),输出低脉冲(clkb域)实例4:输入低脉冲(clka域),输出高脉冲(clkb域)3结绳法3:输入作为数据输入,同样也是检测高有效后,输出一直为高,异步时钟域可以采集到数据后再复位。因为没有将输入作为时钟, 阅读全文

posted @ 2014-02-25 20:07 略过天涯 阅读(875) 评论(0) 推荐(0) 编辑

FPGA异步时钟设计中的同步策略

摘要: 1 引言基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统。但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免。如果对跨时钟域带来的亚稳态、采样丢失、潜在逻辑错误等等一系列问题处理不当,将导致系统无法运行。本文总结出了几种同步策略来解决跨时钟域问题。2 异步设计中的亚稳态触发器是FPGA设计中最常用的基本器件。触发器工作过程中存在数据的建立(setup)和保持(hold)时间。对于使用上升沿触发的触发器来说,建立时间就是在时钟上升沿到来之前,触发器数据端数据保持稳定的最小时间。而保持时间是时钟上升沿到来之后,触发器 阅读全文

posted @ 2014-02-25 19:34 略过天涯 阅读(568) 评论(0) 推荐(0) 编辑

FPGA中亚稳态——让你无处可逃

摘要: 1. 应用背景1.1 亚稳态发生原因 在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。1.2 亚稳态发生场合 只要系统中有异步元件,亚稳态就是无法避免的,亚稳态主要发 阅读全文

posted @ 2014-02-25 13:48 略过天涯 阅读(655) 评论(0) 推荐(0) 编辑

基于FPGA的跨时钟域信号处理——专用握手信号

摘要: 在逻辑设计领域,只涉及单个时钟域的设计并不多。尤其对于一些复杂的应用,FPGA往往需要和多个时钟域的信号进行通信。异步时钟域所涉及的两个时钟之间可能存在相位差,也可能没有任何频率关系,即通常所说的不同频不同相。图1是一个跨时钟域的异步通信实例,发送域和接收域的时钟分别是clk_a和clk_b。这两个时钟频率不同,并且存在一定的相位差。对于接收时钟域而言,来自发送时钟域的信号data_a2b有可能在任何时刻变化。图1跨时钟域通信对于上述的异步时钟域通信,设计者需要做特殊的处理以确保数据可靠的传输。由于两个异步时钟域的频率关系不确定,触发器之间的建立时间和保持时间要求也无法得到保证。如果出现建立时 阅读全文

posted @ 2014-02-25 13:44 略过天涯 阅读(1492) 评论(0) 推荐(0) 编辑

2014年2月12日

simple_strtoul()分析

摘要: 此函数有以下几点值得注意:1、第一个参数中的const。一般在函数的形参中,如果我们只是希望调用者使用该参数,而不会去改变该参数内容(一般是指针指向的内容),则可以声明为const。2、第二个参数。C语言中函数只能有一个返回值,但是有时候我们希望从函数中得到不止一个返回内容怎么办呢?只能通过参数了。一般的参数是用来向函数输入信息的,但是指针型参数可以间接用来从函数输出信息。使用时用户只需传入一个相应的指针,函数中会把需要输出的信息地址传给这个指针,这样在函数调用完成后,用户即可到endp指针处去取函数传出的值了。这就是用参数实现返回值的方式。但是要注意,在函数中千万不可把局部变量的地址传给输出 阅读全文

posted @ 2014-02-12 15:28 略过天涯 阅读(1277) 评论(0) 推荐(0) 编辑

2014年2月11日

十分钟掌握diff&patch用法

摘要: 作为程序员,了解diff&patch命令是非常必要的。比如说我们发现某个项目有bug代码,而自己又没有svn的提交权限,那么此时最合适的解决方法就是用diff命令做一个补丁发给项目成员。项目成员通过patch命令可以立刻知道你的意图。有人会说直接传一个新文件不是更简单?不要忘了,一个patch文件尺寸更小传输更快,而且可以明显的看到都做了哪些修改。保证当前目录是demo名录:# mkdir demo# cd demo先模拟一个项目目录old:# mkdir -p old/a/b# vi old/a/b/foo.txtold_line_1old_line_2假设我们发现项目old有bug 阅读全文

posted @ 2014-02-11 11:45 略过天涯 阅读(1014) 评论(0) 推荐(0) 编辑

导航