【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

很多人都以为写fpga,就是编写verilog,学习一门编程语言而已。这种观点,其实只对了一半。verilog作为一门语言,其本身是为了简化数字电路设计而存在的。但是,这种语言,和软件的编程语言不一样。这是因为,软件的编程语言是变成一条一条的汇编指令,最终这些汇编指令都是由cpu来执行完成的。数字电路则不同,verilog里面的语句是需要变成门电路、触发器、rom、ram、消耗fpga资源的。因此,在编写的时候需要格外慎重。

学过数字电路的同学,一般都会知道组合逻辑和时序逻辑。组合逻辑就是输出和输入是强相关的。只要输入发生变化,输出也会及时发生变化。时序逻辑则不同,它的输出只会发生在时钟上升沿或者下降沿的时候对输入进行响应。除此之外,时序逻辑还有记忆功能。这说明,输出结果除了和输入有关,还和历史状态有关,这本身就很有意义了。

所以,真正学好fpga,并不是说谁的verilog语法了解的多谁就学的好。关键是还在于理清组合逻辑和时序逻辑,设计好时序。在根据功能需求设计好时序图之后,就可以尝试一下设计状态机。有了上面两个部分的加持,就可以把时序图转化为verilog语句了。

有些同学说,为什么在fpga计算的过程中要拆分成组合逻辑和时序逻辑呢。这中间主要还是基于性能的考虑。假设时序逻辑之间的组合逻辑时间太长,这势必就会影响算法的运行频率。别人可以跑200M,你只能10M。如果把较长的运算过程拆分成若干个子状态,这样就可以实现流水线操作。数据a在做a状态运算时,数据b就可以做b状态运算。这样相比而言,运行效率就会比普通的组合逻辑高很多。

说到绘画时序图,现在有很多很好的工具,比如说wavedrom,就是很好的选择。首先尝试编写组合逻辑,比如在浏览器url输入https://wavedrom.com/editor.html,

对应的json文件是,

{ "signal" : [{ "name": "input",         "wave": "01..01." },{ "name": "output",     "wave": "01..01." }
]
}

相关的效果图就是这样的,

换成verilog代码就是,

assgin b = a;

如果是时序图,那么需要加上clk、rst、cnt,json文件修改如下

{ "signal" : [{ "name": "clk",         "wave": "p........." },{ "name": "rst",     "wave": "01.0.......",phase:0.5 },{ "name": "cnt",     "wave": "x223456789", data:["0","0","1","2","3","4","5","6","7"] }
]
}

相对应的图形也会不同的,

转换成verilog代码就是,

always@(posedge clk or posedge rst)if(rst)cnt <= 8'h0;elsecnt <= cnt + 1;

不管是什么样的需求或者是硬件协议标准,最终都是要转化成时序图、状态机的。所以开发过程中最好多画时序图,多画状态机。正向去开发软件,这样就会理解的更加深刻。虽然学习的过程中可能会慢一点。

学fpga(组合逻辑和时序逻辑)相关推荐

  1. 组合逻辑和时序逻辑有什么区别

    根据逻辑电路的不同特点,数字电路可以分为:组合逻辑和时序逻辑. 1 组合逻辑: 组合逻辑的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原本的状态无关,逻辑中不牵涉跳变沿信号的处理,组合逻辑的ve ...

  2. 组合逻辑和时序逻辑的区别与联系

    根据逻辑电路的不同特点,数字电路可以分为:组合逻辑和时序逻辑 组合逻辑 组合逻辑的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原本的状态无关,逻辑中不牵涉跳变沿信号的处理,组合逻辑的verilo ...

  3. FPGA学习笔记——wire和reg数据以及组合逻辑和时序逻辑

    Testbench 编写 wire和reg使用方法 wire语句表示以assign关键字指定的组合逻辑信号,模块的输入输出都默认为wire型,相当于物理接线. reg语句表示寄存器类型.用于alway ...

  4. 组合逻辑和时序逻辑学习笔记

    目录 数字逻辑电路的种类 组合逻辑 时序逻辑 同步有限状态机 数字逻辑电路的构成 组合逻辑构成 时序逻辑构成 组合逻辑举例 一.一个八位数据通路控制器 二.一个八位三态数据通路控制器 数字逻辑电路的种 ...

  5. 组合逻辑和时序逻辑的区别

    分三点 代码上:组合逻辑常常伴随着*号的代码 而时序逻辑常常伴随着时钟上升沿 电路层面:时序逻辑在组合逻辑的基础上多加了一个D 触发器 波形上看来:组合逻辑的波形是即刻反应变化的与时钟无关,但是时序逻 ...

  6. FPGA学习笔记---时序逻辑与组合逻辑分析比较

    在学习FPGA使用Verilog HDL语言编程时,开始遇到时序逻辑和组合逻辑时概念一看就明白,但是实际使用时还是不清楚到底要用哪个.现在用就一个例子来体会一下这两者的区别. 首先先看组合逻辑和时序逻 ...

  7. FPGA之道(43)编写纯净的组合或时序逻辑

    文章目录 前言 编写纯净的组合或时序逻辑 组合逻辑描述方法 范例介绍 注意事项 注意语句顺序 纯时序逻辑描述方法 范例介绍 注意事项 避免敏感双沿 注意语句顺序 清晰的时序逻辑描述方法 范例介绍 无伤 ...

  8. 【 Verilog HDL 】清晰的时序逻辑描述方法之计数器的描述范例

    所谓清晰,就是便于阅读与理解,如下HDL代码所描述的电路就是清晰的时序逻辑电路,对应计数器的功能: always@( posedge clk ) beginif( rst )begincount &l ...

  9. 双 JK 触发器 74LS112 逻辑功能。真值表_数字电路学习笔记(十一):时序逻辑...

    时序逻辑将会是本笔记的最后几章的主题.虽然数字电路课程还包括脉冲电路.模数转换.EDA等内容,但那些和本文的主线内容(不注重硬件搭建的电路设计)关系就不大了. 一.时序功能 我们从一个例子开始,说明时 ...

最新文章

  1. 如何取消JS事件的派发——stopPropagation()
  2. FatFs最新版本获取方法
  3. Angular的工作原理
  4. 清华大学-曾鸣-《ARM微控制器与嵌入式系统》I2C总线(二)
  5. 微积分基本概念相关证明 —— 导数与极限(洛必达法则)
  6. 使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
  7. 软件测试的兼容性和易用性测试
  8. U8采购入库单单价修复sql
  9. 对于超前,滞后,超前滞后使用范围
  10. PHP域名whois查询代码(数据源万网、新网)
  11. typescript常用编译结果函数__decorate、__matadata、__param、__awaiter
  12. python画图颜色设置_python画图--输出指定像素点的颜色值方法
  13. 骁龙695和骁龙750g哪个好
  14. python-合并两个列表并去重
  15. 【C语言】一不小心写出bug?凡人教你如何写出好代码【详解vs中调试技巧】
  16. jdk几个好用的性能调优工具
  17. bzoj3785--骑士游戏--有“环”的动态规划
  18. Wifi对人体有没有危害?
  19. Python创建数学动画
  20. Paddlehub使用说明(一)

热门文章

  1. linux service命令解析(重要)
  2. thinkphp3.2 cli模式的正确使用方法
  3. 烂大街的常用Linux命令、工具
  4. eclipse安装aptana插件对html、js、jq、css等的提示
  5. Telerik RadGridView 右键菜单如何设置?
  6. shell tr命令
  7. STM32线缆综合测试系统
  8. ListView原理
  9. bzoj 2600: [Ioi2011]ricehub
  10. 链表基础操作及其逆置