verilog入门知识小结

verilog入门知识小结

  • 阻塞赋值’=’与非阻塞赋值’<=’
    阻塞赋值:在本句之后所有语句执行之前执行,后边的语句必须在这句执行完毕才能执行,即顺序执行;
    费阻塞赋值:always块所有语句执行完毕再赋值,即并行执行;
    注:
    1.时序用‘<=’,左边是reg型;组合的always和assign用‘=’左边是wire型;
    2.reg输出只在时钟边沿变换,所以必须在always中赋值;wire型用组合逻辑,类似于与非、异或门电路,在任何地方可以改变赋值,包括always内;
    3.always中的输入可以使reg或wire,但是输出必须用reg
  • 多个并列条件用case语句;else只和最近的if同级;
  • 高阻态
    高阻态相当于该门与该门和它连接的电路处于断开的状态;在FPGA设计时,内部信号不能不能出现被赋值为高阻的状态,只有顶层的信号才能被赋值为高阻;
  • *begin-end顺序;fork–join并行
  • ‘_’下划线
    用于区别开数字表达式以提高可读性。但是不能用在位宽和进制的地方,只能用于数字之间,数字前也不可以。
    注:常量未说明默认32位十进制;字母用8位ASCII码表示;
  • always@()
    1.敏感列表中可以加时钟沿或者电平(可以是reg)作为敏感事件,不可以同时包括电平敏感事件和边沿敏感事件,也不可以同时包括同一个信号的上升沿和下降沿,这两个事件可以合并为一个电平敏感事件。
    2.*表示所有输入变量;
    3.因此设计人员必须将所有的输入信号和条件判断信号都列在信号列表中。有时不完整的信号列表会造成不同的仿真和综合结果,因此需要保证敏感信号的完备性。EDA工具都会默认将所有的输入信号和条件判断语句作为触发信号,增减敏感信号列表中的信号不会对最终的执行结果产生影响,因此读者如果期望在设计中通过修改敏感信号来得到不同的逻辑,那就大错特错了。当敏感信号不完备时,会使得仿真结果不一样,这是因为仿真器在工作时不会自动补充敏感信号表。如果缺少信号,则无法触发和该信号相关的仿真进程,也就得不到正确的仿真结果。
  • 寄存器初值问题
    1.FPGA上电起来后,寄存器是有个值,这个值是通过 reg a = xx;来赋值的。编译一下就知道,那个上电的初值是经过逻辑门的搭出来的。一般上电是0,如果是1的话要加非门,如果有多个寄存器初值为1的话,逻辑资源占用比较明显。
    2.复位后,寄存器的值由代码的复位逻辑决定的,例如: always@(posedge clk or negedge rstn) if(!rstn) reg <= xx;
  • rst后的地址指向
    rst后地址指向0,为保证送数时间相同,一般从1地址开始送有效数据。
    为避免竞争,地址改变与寄存器读数不要在一个时钟沿进行。
  • 连线时输出变量和中间变量可以是reg,但输入不能是reg
    输入对于本模块不可控所以不能用reg
  • DCM全局时钟
    数字时钟管理模块(Digital Clock Manager,DCM)是基于Xilinx的其他系列器件所采用的数字延迟锁相环(DLL,Delay Locked Loop)模块。在时钟的管理与控制方面,DCM与DLL相比,功能更强大,使用更灵活。DCM的功能包括消除时钟的延时、频率的合成、时钟相位的调整等系统方面的需求。DCM的主要优点在于:①实现零时钟偏移(Skew),消除时钟分配延迟,并实现时钟闭环控制;②时钟可以映射到PCB上用于同步外部芯片,这样就减少了对外部芯片的要求,将芯片内外的时钟控制一体化,以利于系统设计。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值