如何编写和验证简单的纯组合逻辑模块——《Verilog数字系统设计教程》读书笔记(二)
2010-10-20 21:56
337 查看
每个模块的设计工作包括3个部分:1,电路模块的设计;2,测试模块的设计;3,设计文档的编写和整理。测试模块的设计和文档编写是比电路模块设计更为重要的设计环节,测试是否严密和完整决定了系统设计的成败,设计文档的完整和准确也是系统设计成败的关键,缺少完整的设计说明文件,就不能维持设计工作的连续性,为今后的调试和维护带来困难。组合电路逻辑在数字系统中起着基本组件的作用,也可以说,如果不了解组合逻辑的构成,就不可能对数字逻辑电路系统有任何了解。采用Verilog或VHDL高层次设计方法,也是以基本组合逻辑电路为基础的。如果没有基本组合逻辑电路知识,即使对Verilog 或 VHDL 语法了如指掌,也不可能设计出结构合理的复杂系统。
1.0 加法器
要想用Verilog描述一个加法器其实很简单,但是要想知道FPGA里面到底是怎么通过最简单的与非门实现的还是有点难度的。从半加器到全加器在全加器的串联再到超前进位加法器和超前进位产生器,我们描述的加法器到底是串联的还是并联的呢?里面的布局布线是怎样的呢?时序又是怎么样的呢?这是目前我研究的重点。
在实现算法时(如卷积运算和快速傅里叶变换),常常会用到加运算。由于多位并行加法器是由多层组合逻辑构成的,加上超前进位形成的逻辑虽然减少了延时,但还是有多级门和布线的延迟,而且随着位数的增加延迟还会积累,这样就使加法器的使用频率受到限制,这里是指计算的节拍(即时钟)必须大于运算电路的延迟,只有在输出稳定后才能输入新的数据进行下一次运算。如果设计的是32位或者是64位的加法器,延迟就会更大。为了加快计算速度,可以在运算的组合逻辑层中加入多个寄存器组来暂存中间结果。也就是采用数字逻辑设计中常用的流水线(pipe-line)办法,来提高运算速度。
这样设计的加法器在行为仿真时是没有延时的。借助综合器,可以将以上代码自动将其综合成典型的加法器结构。综合器有许多选项可供设计者选择,以便来控制自动生成的电路性能。设计者可以考虑提高电路的速度或者是节省电路元件以减少电路占用硅片的面积。综合器会自动根据你的选项为你挑选一种基本加法器的结构,有的综合器还可以根据用户对运算速度的要求插入流水线结构。
1.1 乘法器
用Verilog描述一个乘法器也非常容易,想要把它是怎样实现的具体搞清楚也还是要下点功法地。乘法器的最小单元MU是由一个与门和一个全加器组成的。多位乘法器是由许多MU组成的这就有了 逐位进位并行乘法器 和 进位节省乘法器。里面具体的传输延时和进位延时我还是不会算。悲哀,但我会一天进步一点点。
1.0 加法器
要想用Verilog描述一个加法器其实很简单,但是要想知道FPGA里面到底是怎么通过最简单的与非门实现的还是有点难度的。从半加器到全加器在全加器的串联再到超前进位加法器和超前进位产生器,我们描述的加法器到底是串联的还是并联的呢?里面的布局布线是怎样的呢?时序又是怎么样的呢?这是目前我研究的重点。
在实现算法时(如卷积运算和快速傅里叶变换),常常会用到加运算。由于多位并行加法器是由多层组合逻辑构成的,加上超前进位形成的逻辑虽然减少了延时,但还是有多级门和布线的延迟,而且随着位数的增加延迟还会积累,这样就使加法器的使用频率受到限制,这里是指计算的节拍(即时钟)必须大于运算电路的延迟,只有在输出稳定后才能输入新的数据进行下一次运算。如果设计的是32位或者是64位的加法器,延迟就会更大。为了加快计算速度,可以在运算的组合逻辑层中加入多个寄存器组来暂存中间结果。也就是采用数字逻辑设计中常用的流水线(pipe-line)办法,来提高运算速度。
这样设计的加法器在行为仿真时是没有延时的。借助综合器,可以将以上代码自动将其综合成典型的加法器结构。综合器有许多选项可供设计者选择,以便来控制自动生成的电路性能。设计者可以考虑提高电路的速度或者是节省电路元件以减少电路占用硅片的面积。综合器会自动根据你的选项为你挑选一种基本加法器的结构,有的综合器还可以根据用户对运算速度的要求插入流水线结构。
1.1 乘法器
用Verilog描述一个乘法器也非常容易,想要把它是怎样实现的具体搞清楚也还是要下点功法地。乘法器的最小单元MU是由一个与门和一个全加器组成的。多位乘法器是由许多MU组成的这就有了 逐位进位并行乘法器 和 进位节省乘法器。里面具体的传输延时和进位延时我还是不会算。悲哀,但我会一天进步一点点。
相关文章推荐
- 简单思考如何编写描述一个模块
- 简单编写php验证类,教你如何写好php程序(含多种验证规则)
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 《C#入门经典(第6版)》之如何编写简单的桌面应用程序
- CLR via C# 3 读书笔记(13):第2章 生成、打包、部署和管理应用程序与类型 — 2.4 将模块组合为程序集(下)
- 神箭手云爬虫平台 如何在1小时内编写简单爬虫
- 如何在Magento(麦进斗)中创建一个简单的“Hello World”模块?
- simulink小技巧:如何将自己编写的模块集成到模块浏览器里面去
- python脚本初探---新手如何直接编写一个hello world模块即可执行的.py文件
- 如何编写程序,使它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现?
- jQuery插件如何编写03_ 简单的全选反选插件
- Swift实现断点续传,Demo简单易懂,没有太多复杂模块和逻辑,完整体现断点续传的原理
- 普元EOS简单运算逻辑的编写
- Python中使用urllib2模块编写爬虫的简单上手示例
- C#基础视频教程4.1 如何编写简单的计算器
- 如何使用 require.js ,实现js文件的异步加载,避免网页失去响应,管理模块之间的依赖性,便于代码的编写和维护。
- 简单地迁移你的android jni代码逻辑到iOS - 编写iOS下jni.h的替代 - ocni.h
- C#基础视频教程7.1 如何编写简单游戏
- 如何编写一个简单的依赖注入容器
- 关于软件防止破解的思考,如何避免简单的跳转指令型的验证方法,如何设置更复杂的验证方式。