搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
知新_RL
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
配置SSH远程登录和免密登录_虚拟机设置ssh无密码登录节点
2
go 利用channel实现定时任务
3
DevOps已死?2024年的DevOps将如何发展
4
失物招领平台|基于Springboot+Vue实现失物招领系统_springboot和vue工具软件
5
网络安全审计系统产品竞品分析_网络安全-安全管理平台soc竞品分析v1.7.xlsx
6
二分查找(详解)
7
Unity Mecanim动画系统
8
LAMP兄弟连PHP高薪就业班2012召集令_毕广富
9
Day:005 | Python爬虫:高效数据抓取的编程技术(爬虫效率)
10
k8s容器内的东西复制出来_如何把文件放进Docker或Kubernetes中,如何拷贝出来
当前位置:
article
> 正文
数字集成电路设计(六、Verilog HDL高级程序设计举例)
作者:知新_RL | 2024-04-19 22:13:07
赞
踩
数字集成电路设计(六、Verilog HDL高级程序设计举例)
文章目录
1. 数字电路系统设计的层次化描述方式
1.1 Bottom-Up 设计方法
1.2 Top-Down 设计方法
2. 典型电路设计
2.1 加法器树乘法器
2.1.1 改进为两级流水线4位加法器树乘法器
2.2 Wallace 树乘法器
2.3 复数乘法器
2.4 FIR滤波器的设计
2.5 存储器的设计
2.6 FIFO的设计
1. 数字电路系统设计的层次化描述方式
在我们的数电,集成电路设计里面,一定是层次化设计的
在一个手机芯片的一个部分,写的硬件描述语言的层次都能达到20几层,对于这样的设计,我i们就能想到采用底层的设计,中间层的设计和顶层的设计。对于小规模电路,极小规模电路,通常想的是先有模块然后去搭一个电路,这样的就叫Bottom-Up的设计
1.1 Bottom-Up 设计方法
Bottom-Up 设计方法是一种传统的设计方法,它要求电路设计者将系统进行模块划分,从底层模块设计开始,运用各底层模块搭建一个完整的系统。在这种设计方法中,首先根据系统设计的要求,定义并建立所需要的叶子模块,通过模块连接方式建成较大的模块,然后把这些比较大的模块组合成具有一定功能的模块,最后将这些功能模块组合,直到完成整个系统
!!这种设计方式存在一些问题:规模做不大。当你做完最简单的模块往上堆,当堆得越来越高的时候你会发现这个时序差一点,那个差一点。这时候要怎么改呢?要从地下往上改,这个工作量非常大,
所 以 这 是 不 推 荐 的 一 种 设 计 方 式 所以这是不推荐的一种设计方式
所
以
这
是
不
推
荐
的
一
种
设
计
方
式
举例:串行加法器
1.2 Top-Down 设计方法
!!现在的大规模,超大规模集成电路设计,一定是从顶层开始设计的,包括功能,面积,时序,功耗等
对于下面,会写出空的模块给下面,会告诉每一个模块自己的约束,然后再往下分,一直分到Engineer。
能做到最上面得都是行业顶尖
!!!!从代码的角度,真正难得是在下面,说的行为级描述啥都是在底层的模块,越往上面越是结构性的描述,都是模块搭,但是这个模块搭建就要求非常严格。所以在我们的设计中一定要做好这方面的准备工作,然后才会有时序,总线一大堆的概念,所以是一个不断学习的过程
举例:
2. 典型电路设计
2.1 加法器树乘法器
加法器树乘法器的设计思想是“移位后加”,并且加法运算采用加法器树的形式。乘法运算的过程是,被乘数与乘数的每一位相乘并且乘以相应的权值,最后将所得的结果相加,便得到了最终的乘法结果。也就是第一位不用移,第二位乘2相当于左移一位,以此类推。
Verilog代码实现上图的4位加法器树乘法器:
这个电路的速度会非常慢,他的速度决定于加法,这个电路就是二选一的数据选择器拼接在一起,主要的延迟就是来自于加法的延迟
2.1.1 改进为两级流水线4位加法器树乘法器
为了提高乘法器的速度,可以穿插流水线的方式,这样就可以把两步的加法变成一步的加法的速度(其实改变的是吞吐率,关于流水线可以看我的数电博客 https://blog.csdn.net/y_u_yu_yu_/article/details/127641915)
!!在计算机中,我们现在的普通高精度乘法是64位乘64位,可想而知,我们在它的运算指令单元中加多少级流水线才能达到3.几个G的运算速度。cpu的运算结构,虽然占很大面积,但是并不是很麻烦的一件事情,所有的计算单元基本都是以这种方法来提高它的计算速度
通过在第一级与第二级、第二级与第三级加法器之间插入 D触发器组,可以实现两级流水线设计,其VerilogHDL代码如下:
!!在时钟上升沿用了一个非阻塞型赋值,就可以得到流水线的操作(当我们讲阻塞赋值和非阻塞赋值在时序电路中就是流水线的事情)
2.2 Wallace 树乘法器
!!在电路设计中,最可怕的不是之前的单元,而是加法。在4位乘法,我们对于一个传统的加乘的观念,要进行六级以上,使得延迟会变得非常大。Wallace通过3级就能实现4x4这样结构的乘法
其基本原理是加法从数据最密集的地方开始,不断地反复使用全加器、半加器来覆盖“树”。这一级全加器是一个3输入2输出的器件,因此全加器又称为3-2压缩器。通过全加器将树的深度不断缩减,最终缩减为一个深度为 2 的树。最后一级则采用一个简单的 2 输入加法器组成。
形成的电路结构如下图,运用了全加器和半加器(FA 为全加器,HA 为半加器)
Verilog代码:
测试代码:
测试结果:
!!一开始设计可能是有了基本的知识就可以,但是越到后面越考验数学的能力,数学建模和建模后化简成电路的能力
2.3 复数乘法器
复数乘法的算法是:设复数 x=a +bi , yc +di ,则复数乘法结果为
用了四个乘法和两个加法
!!!!根据具体的电路要求,我们可以进行优化:如果是高速电路,我们需要在所有的乘法器和加法器打上流水线才算做完;对于低速电路,整个芯片工作能力比如是500Mhz,但是我需要50Mhz,这时候简化成一个乘法器一个加法器就够了,在想让面积减小的时候也可以这么做
Verilog实现:
测试结果
2.4 FIR滤波器的设计
滤波器就是对特定的频率或者特定频率以外的频率进行消除的电路,被广泛用于通信系统和信号处理系统中。从功能角度而言,数字滤波器对输入离散信号的数字代码进行运算处理,以达到滤除频带外信号的目的。
!!这个电路非常重要,所有的信号处理,所以的移动终端上,都有大量的FIR。这个东西的特点是面积特别大,电路特别简单
有限冲激响应(FIR)滤波器就是一种常用的数字滤波器,采用对已输入样值的加权和来形成它的输出。其系统函数为
其中z
-1
表示延迟一个时钟周期,z
-2
表示延迟两个时钟周期
对于输入序列X[n]的FIR 滤波器,可用图6.2-10 所示的结构示意图来表示,其中X[n]是输入数据流。各级的输入连接和输出连接被称为抽头,系数(b
0
,b
1
,……,b
n
)被称为抽头系数。一个M 阶的FIR 滤波器将会有 M+1个抽头。通过移位寄存器用每个时钟边沿 n(时间下标)处的数据流采样值乘以抽头系数,并将它们加起来形成输出 Y[n]。
!!在Altera,Xilinx等的所有工具中间都有滤波器工具,可以通过给定的长度和要求,可以自动生成滤波器的系数。在设计滤波器的时候,首先应该大概画一个曲线的样子,然后用这些工具生成系数,然后在仿真看系统有没有影响,然后定点化,然后再看有没有影响,然后放到电路设计里面
!!!!IIR滤波器在信号中会产生振荡,产生自激的现象。FIR在信号中只有零点没有极点,而IIR滤波器由于反馈会有极点产生,极点对于电路代表的是不稳定,IIR滤波器很吸引人,因为几阶就能达到FIR几十阶的效果,但是我们牺牲了反馈型滤波器而用横向滤波器
MATLAB也嵌入了设计工具,给抽头长度,给要求,就会生成浮点的和定点的抽头系数,还可以直接生成Verilog代码
!!在这个电路中,对电路产生延迟最大的是加法器,乘法器只是两个数相乘然后输出就行了,不会引起太多延迟。当抽头变多的时候,我们会增加加法器的数量
2.5 存储器的设计
存储器发生了巨大的变革,全世界最好的工艺都在做存储器,得存储器,得数字电路天下,存储器做的越好,数字集成电路越好。从工艺角度上,存储器单元都是一样的,这时候对高精度的线是非常有利的,检查良品率,只要一致性好,没有问题;打开cpu来看,存储器的面积占了一大半
2.6 FIFO的设计
实操可以看我FPGA的博客 https://blog.csdn.net/y_u_yu_yu_/article/details/127157227
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/知新_RL/article/detail/453889
推荐阅读
article
从零开始
verilog
以太网交换机
(二)
MAC
接收
控制器
的设计与实现_如何开发
一个
以太网交换机
...
本章进行
MAC
控制器
的设计与实现,共分为两个部分:接收
控制器
和发送
控制器
。整体架构可以参考:
从零开始
verilog
以...
赞
踩
article
【
FPGA
】
Verilog
:组合电路 |
3
—
8
译码器
|
编码器
|
74LS14
8
_verilo...
【
FPGA
】
Verilog
:组合电路 |
3
—
8
译码器
|
编码器
|
74LS14
8
_
verilog
hdl设计一个
3
...
赞
踩
article
【
FPGA
/
verilog
-入门学习
10
】
verilog
查表法
实现
正弦
波形发生器
...
那么就意味着你会延时两个时钟周期输出数据,在Summary中也可查看。1,使用matlab 生成数据,制作sin_rom...
赞
踩
article
verilog
always
的用法_
verilog
always
用法...
always
语句块从仿真0时刻开始执行其中的行为语句;最后一条执行完成后,再开始执行其中的第一条语句,如此往复循环,直到...
赞
踩
article
【
Verilog
】
一
、
Verilog
的
always
使用
_verilog
always
用法...
【
Verilog
】
一
、
always
使用
有不足请各位观众老爷批评指正~
一
、
Verilog
HDL 模块的模板(仅考虑用于逻...
赞
踩
article
Verilog
学习第四节(从计数器到可控制线性序列机——
LED
实验进化六部曲)_现
需要
在
主
循环
中编...
1:锻炼了自己分析波形
的
能力,自己调试,最初小梅哥
的
代码
在
间隔10ms
的
时间里会一直保持ctrl[0]
的
状态,让波形看
的
...
赞
踩
article
基于
vivado
+
Verilog
FPGA
开发
— 基于线性序列机的SPI接口
ADC128S102
逻...
._
adc128s102
具备
sha
adc128s102
具备
sha
代码规范:
Verilog
...
赞
踩
article
FPGA
(
Verilog
)实现
按键
消抖
...
FPGA
(
Verilog
)实现
按键
消抖
,Modelsim仿真。
FPGA
(
Verilog
)实现
按键
消抖
...
赞
踩
article
FPGA
学习之路—接口(3)—
SPI
详解及
Verilog
源码分析_
spi
flash
verilog
...
FPGA
学习之路——
SPI
详解及
Verilog
源码分析概述
SPI
= Serial Peripheral Interfa...
赞
踩
article
SPI
的原理以及
Verilog
HDL实现_
spi
flash
verilog
sim
model
...
文章链接:
SPI
https://www.diangon.com/wenku/rd/danpianji/201501/00...
赞
踩
article
【全解析 | PTA】浙大版《
Python
程序设计
》题目集-第三章
_
len
(
'
3//
11
//201...
Python
/PTA/浙大版/
Python
程序设计
/题解
_
len
(
'
3//
11
//2018
'
.
split
(
'
/
'
))的结...
赞
踩
article
基于
Lattice
XO2
-
4000HC
FPGA
核心板及电子森林综合训练底板的
ADC
数字
电压
表及O...
基于
Lattice
XO2
-
4000HC
核心板及电子森林综合训练底板,实现了通过串行
ADC
对旋转电位计产生的
电压
进行转换...
赞
踩
相关标签
macos
fpga开发
Verilog
学习
always
fpga
verilog
spi
python
数据库
开发语言
lattice
电子森林