学fpga(组合逻辑和时序逻辑)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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 组合逻辑: 组合逻辑的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原本的状态无关,逻辑中不牵涉跳变沿信号的处理,组合逻辑的ve ...
- 组合逻辑和时序逻辑的区别与联系
根据逻辑电路的不同特点,数字电路可以分为:组合逻辑和时序逻辑 组合逻辑 组合逻辑的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原本的状态无关,逻辑中不牵涉跳变沿信号的处理,组合逻辑的verilo ...
- FPGA学习笔记——wire和reg数据以及组合逻辑和时序逻辑
Testbench 编写 wire和reg使用方法 wire语句表示以assign关键字指定的组合逻辑信号,模块的输入输出都默认为wire型,相当于物理接线. reg语句表示寄存器类型.用于alway ...
- 组合逻辑和时序逻辑学习笔记
目录 数字逻辑电路的种类 组合逻辑 时序逻辑 同步有限状态机 数字逻辑电路的构成 组合逻辑构成 时序逻辑构成 组合逻辑举例 一.一个八位数据通路控制器 二.一个八位三态数据通路控制器 数字逻辑电路的种 ...
- 组合逻辑和时序逻辑的区别
分三点 代码上:组合逻辑常常伴随着*号的代码 而时序逻辑常常伴随着时钟上升沿 电路层面:时序逻辑在组合逻辑的基础上多加了一个D 触发器 波形上看来:组合逻辑的波形是即刻反应变化的与时钟无关,但是时序逻 ...
- FPGA学习笔记---时序逻辑与组合逻辑分析比较
在学习FPGA使用Verilog HDL语言编程时,开始遇到时序逻辑和组合逻辑时概念一看就明白,但是实际使用时还是不清楚到底要用哪个.现在用就一个例子来体会一下这两者的区别. 首先先看组合逻辑和时序逻 ...
- FPGA之道(43)编写纯净的组合或时序逻辑
文章目录 前言 编写纯净的组合或时序逻辑 组合逻辑描述方法 范例介绍 注意事项 注意语句顺序 纯时序逻辑描述方法 范例介绍 注意事项 避免敏感双沿 注意语句顺序 清晰的时序逻辑描述方法 范例介绍 无伤 ...
- 【 Verilog HDL 】清晰的时序逻辑描述方法之计数器的描述范例
所谓清晰,就是便于阅读与理解,如下HDL代码所描述的电路就是清晰的时序逻辑电路,对应计数器的功能: always@( posedge clk ) beginif( rst )begincount &l ...
- 双 JK 触发器 74LS112 逻辑功能。真值表_数字电路学习笔记(十一):时序逻辑...
时序逻辑将会是本笔记的最后几章的主题.虽然数字电路课程还包括脉冲电路.模数转换.EDA等内容,但那些和本文的主线内容(不注重硬件搭建的电路设计)关系就不大了. 一.时序功能 我们从一个例子开始,说明时 ...
最新文章
- 如何取消JS事件的派发——stopPropagation()
- FatFs最新版本获取方法
- Angular的工作原理
- 清华大学-曾鸣-《ARM微控制器与嵌入式系统》I2C总线(二)
- 微积分基本概念相关证明 —— 导数与极限(洛必达法则)
- 使用IntelliJ IDEA开发SpringMVC网站(四)用户管理
- 软件测试的兼容性和易用性测试
- U8采购入库单单价修复sql
- 对于超前,滞后,超前滞后使用范围
- PHP域名whois查询代码(数据源万网、新网)
- typescript常用编译结果函数__decorate、__matadata、__param、__awaiter
- python画图颜色设置_python画图--输出指定像素点的颜色值方法
- 骁龙695和骁龙750g哪个好
- python-合并两个列表并去重
- 【C语言】一不小心写出bug?凡人教你如何写出好代码【详解vs中调试技巧】
- jdk几个好用的性能调优工具
- bzoj3785--骑士游戏--有“环”的动态规划
- Wifi对人体有没有危害?
- Python创建数学动画
- Paddlehub使用说明(一)