随笔分类 - verilog
摘要:小有成就的一件事,自己纯手工,基本没有参考别人的代码,只是参考了一些思想,除了51的core用的是mentor的,其他东西都是自己和之前的自己积累下来的东西,硬件代码独立完成。框图如下:整个memory的地址映射关系如下表:PBUSROM2KX80x0000~0x07FFSRAM1KX80x2000~0x23FFEFLASH32KX80x8000~0xFFFFXBUSSRAM1KX80x3000~0x33FF比较新鲜的东西其实没有什么,memory全部使用同步逻辑的memory,加入的gpio是由于功能的需要(后面会有介绍)。只是在eflash_ctrl上多花了点心思进行调试。下面来详细说说这
阅读全文
摘要:这次的测试总共花了3个晚上加上一个白天,收获不能算是不多,只不过有点小虚,因为解决的都是板级的问题了,不过这种经验还是越多越好,不然下次自己的神马芯片出了问题的话,可能就真解决不了了。本来是2012/12/11打算一晚上测完的,结果搞了4天,到周五白天花了一个白天真正测试完毕。期间经历了各种问题,真是各种蛋疼啊,拖到了现在才来记述,因为今天流片任务才算正式结束的。第一个晚上,把本来在系统组的analog only的测试平台搬到了1201,于是发现怎么都调不好,就开始各种手摸着各种pin脚,各种试验,终于第一天晚上把问题大概的定位到了analog only的SPI总线上,发现将CSn和SCK用手
阅读全文
摘要:这里有一个小技巧,就是在nc跑前仿(包括后仿的一些情况的时候),将ncelab的权限放低的话,可以大大加快仿真的速度。将本来的+rwc换成+r就可以了,具体的解释建议还是看一下ncvlog的helper/manual。这个简单的解释摘录一下Read access is required if you want to probe objects in the design and generate an SHM,VCD, or EVCD database. This lets you use the SimVision waveform viewer to view waveforms,and
阅读全文
摘要:近来陆陆续续干了些杂事,近来的事是帮助跑3X01的后仿,前面其实前仿也有问题,待我慢慢叙来。首先出现的问题是用modelsim在跑前仿的时候会出现x,感觉这是非常不合理的一种情况,因为是前仿,又不是timingchecks task导致的x,那么一定是input了x,导致这里出现了x,最后发现是mem的初始化的时候有一部分的值没有初始化,但是最后却又读到了这部分的东西,而且由于是netlist,它引入了一个带DFF的反馈的结构,就会导致这部分除了给reset外,其他情况都不会使得这个DFF脱离x状态,这样的话,当x引入的时候就会导致后面的仿真都会出现问题(真2b的testbench我只能说)这
阅读全文
摘要:What’s an LFSR?看了TI的一篇paper,不得不感叹,这搞模拟的公司搞起数字来,就感觉不伦不类,连个电路图都画的让我感觉蛋疼。艹,转正题先上几个要接触到的概念LFSR = linear feedback shift registerPSA = parallel signature analyzerPRPG = pseudorandom pattern generationPattern-resistant logic - logic for which the pseudorandom pattern generation technique is...
阅读全文
摘要:还是来自一篇paper 分清楚case/casez/casex 在simulation/synthesis到底有什么不同我基本就是照着翻译下来,基本没啥我总结的东西,因为消化的不好首先,一般性的常识是使用casez,强烈的建议不要使用casex,(虽然我没有这个常识)。这是为啥呢?待续。首先要明确的是'?'代表的不是don't care,而是'z'。这点一定要明确。再有就是case/casez/casex其实都是可综合的,这一点也要记住。好,再说区别case treats 'z' & 'x' as it iscas
阅读全文
摘要:算是转的原文 http://www.edaboard.com/thread139461.html#post604717核心就是setup time和hold timeHOLD violations are dangerous than SETUP.To keep it simple way, SETUP timing depends on the frequency of operation. But HOLD time is not.先来定义几个后面会用到的变量Tclk = Frequency of operation (can be variable)Tcq = Flop clock to
阅读全文
摘要:什么叫做真正的理解setup time/hold time呢?听我道来。就是要讲明白的setup time和hold time,都知道setup time的公式是Tclk > Tcq + Tcomb + Tsetup - Tskewhold time的公式是Thold < Tcq + Tcomb - Tskew那么这两个公式是怎么来的呢?就是我要说明的问题在我下面所举的例子中,Tsetup和Thold都是针对DFF2而言的,而符号含义如下Tclk = Frequency of clockTcq = Flop clock to Flop q delayTcomb = Delay...
阅读全文
摘要:+-------------------------------------------+--------------------------------------------+|任务可以有input、output和inout,数量不限; | 函数只有input参数,且至少有一个input ||-------------------------------------------+--------------------------------------------||任务可以包含有时序控制(如延时等); | 函数不能包含有任何延迟,仿真时间为0; ||-...
阅读全文
摘要:国人讲CRC的没有什么能讲明白的文章,除了一篇《我学习 CRC32、CRC16、CRC 原理和算法的总结(与 WINRAR 结果一致)》,这里先感谢他,另,他也有一些没有说明白的地方,怎么说呢,还是鄙人自己来吧。我弄明白CRC这个原理和算法主要参考的是上面的国人的那篇和这个外国的《A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS INDEX V3.00 (9/24/96)》,地址 http://www.repairfaq.org/filipg/LINK/F_crc_v3.html 这两篇大作。首先要明确的是CRC只是一种错误检错的码,而没有纠
阅读全文
摘要:转自http://bbs.ednchina.com/BLOG_ARTICLE_245390.HTM这篇文章感觉写的相当好1、简介这篇文章是我对电子设计中,亚稳态问题的一种分析和总结。文章通过对数字电路中器件的工作机制的介绍,引出亚稳态问题的发生机制。并通过对亚稳态问题发生机 制的探讨,用以得到一种能够清楚地,有的放矢地解决亚稳态问题的能力。而这种能力,将会成为你作为一个工程师的价值所在。希望通过这个探讨,可以使你设计 出属于自己的预防亚稳态的方法。对于常用的预防亚稳态的方法,由于网上已经有大量介绍,并且涉及到具体问题的分析,这里将不做重点介绍。2、CMOS中的信息保存Fig. 1. MOS管的
阅读全文
摘要:注意这是哥的原创。起因是看到了M8051里面的memory,都有个define的延时,所以这里想查一下nc的选项看能不能给在ncelab的选项里面 直接给避过去,但是发现有了些学问,听我慢慢到来。首先 行为级描述的延时都是不可搞的 就是你在ncelab里面设置了0延时 但是其实是不起作用的ncelab里面搞0延时的选项是-delay_mode zero,具体详情可以在查看一下nc的帮助 这个选项能起什么作用呢一、先让我们来看看线网时延,举例如下1.wire #5 arb;这个代表的意识就是arb这个wire的反映要慢#5,这个的意思就是说,当你在赋值的时候就会发现如果像上面这样声明的话就会有着
阅读全文
摘要:specify block用来描述从源点(source:input/inout port)到终点(destination:output/inout port)的路径延时(path delay),由specify开始,到endspecify结束,并且只能在模块内部声明,具有精确性(accuracy)和模块性(modularity)的特点。specify block可以用来执行以下三个任务:一、描述横穿整个模块的各种路径及其延时。(module path delay)二、脉冲过滤限制。(pulse filtering limit)三、时序检查。(timing check)specify block
阅读全文
摘要:大牛就是大牛看完我又茅厕顿开了说的都是一些async FIFO的基础的东西 但是感觉这些基础的东西自己以前都是一知半解的 现在终于算是有点觉悟了当你使用同步FIFO的时候 大可以不必要弄两个counter 直接一个counter wr就+1 rd就-1,又wr又rd就hold,就完事了像我之前写的小FIFO总是拘泥于异步FIFO的圈子 弄的乱七八糟的接着 使用FIFO的时候 也可以考虑通过handshake来同步两边的pointer来进行比较 和判断full/empty 还是看应用的场合来决定 使用何种手段来搞pointer 的跨时钟域的问题之所以不用binary而用gray,这里还是考虑mu
阅读全文
摘要:首先是看了PARADIGM WORKS的一篇名为《Crossing the Abyss——Asynchronous Signals in a Synchronous World》的paper吧应该是其实之前华老师很大篇幅的论文都是翻译的这篇文章里面的内容 国内的博客也有很多说的堂而皇之的话是翻译这篇文章的说的都是一些很实在的跨时钟域的基本知识 感觉看过之后有种醍醐灌顶之感首先就是基本的同步器就是两个DFF,这两个DFF在版图的时候一定要被放的非常近,以保证非常小的clock skew,再有就是第一个DFF对毛刺非常敏感 所以从原时钟域同步到新时钟域的时候 原时钟域的DFF与这个第一级的同步DF
阅读全文
摘要:这次发现的问题其实还是很有代表性的 是关于系统函数与组合逻辑的时刻取指问题问题发现的缘由是 本来想写一个纯组合逻辑运算的电路 用display的方式把每次的结果显示出来 于是便有了下文首先先看一下代码 1 //////////////////////////////////////////////////////////////////////////////// 2 // MODULE NAME : gray_code // 3 // DATE : ...
阅读全文
摘要:1.分频用的计数器 除非需要控制初始相位,否则分频用的计数器往往都是自由运行的,只要每个时钟加1就好。2.移位寄存器 为了使pipeline配合正确,设计中经常会存在移位寄存器。这种情况下,你只要复位第一级寄存器,然后保持若干个周期,移位寄存器就被彻底复位了,而不用为每个bit都添加复位。移位寄存器不使用复位的又一个好处是可以利用SRL。3.moore型状态机输出 对于那些moore型状态机的输出,你只要复位了状态机,下一个周期就会被复位。不用复位可能会引起的一个问题是仿真时出现一堆的X。这个问题可以通过在HDL文件中为寄存器赋初值解决。顿时理解了为什么majority逻辑里面为什么不用...
阅读全文
摘要:读毕《基于verilog HDL的数字系统应用设计》(第2版)王钿 卓兴旺著知识收集如下1. 若总线上所有驱动源均停止驱动且无上拉或下拉电阻,则总线悬空,总线对地相当于一电容;如果关闭总线之前的驱动为高电平,则用示波器可观测到一个类似电容放电的现象。若总线有上拉或者下拉电阻,则可以快速地被上拉到高电平或下拉到低电平,从而避免总线因电容缓慢放电而处于电平漂浮不定的情况。2. 一般来说,只要if...else语句中的条件是互斥的(因为互斥所以不存在优先级),在synplify下的综合结果就是并行且不带优先级的电路3. latch所耗用的逻辑资源比DFF少(DFF需要12个MOS管,latch...
阅读全文
摘要:在组合逻辑中,容易综合出锁存器的语句是if和case,其实只要配对使用if...else;case用default就基本上可以避免锁存器;case1(有锁存器):module mux_latch( input [3:0] data, input [1:0] valid, input flag, output reg valid_data);always @ (*) begin if(valid==2'd0) valid_data = data[3]; if(valid==2'd1) valid_data = data[2]; if(valid==2'd2) valid_
阅读全文
摘要:1. 用“与”操作实现快速求余运算,例如:a = a % 8;可以改为:a = a & 7;说明:位操作只需要一个指令周期即可完成,而大部分的C编译器的“%”运算均是调用子程序来完成的,代码长、执行速度慢。通常,只要是求2n方的余数,均可使用位操作的方法来代替。2.优缺点latch & Flip-Flop:-->Latch takes less area, consume less power, facilitate time borrowing or cycle stealing, not friendly with DFT tools-->Flip-flop t
阅读全文

浙公网安备 33010602011771号