搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
笔触狂放9
这个屌丝很懒,什么也没留下!
关注作者
热门标签
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
【低照度图像增强系列(2)】Retinex(SSR/MSR/MSRCR)算法详解与代码实现_ssr低光增强算法原理
2
nacos微服务的原理及应用_nacos 核心原理解读+高性能微服务系统实战
3
python数据爬取案例--地产数据及交通数据_交通数据抓取
4
git clone时报错 fatal: protocol ‘https‘ is not supported_fatal: unencrypted http is not supported for gitla
5
Mac上使用phpstudy+vscode配置PHP开发环境_mac os的vs code配置php开发环境
6
详解git如何回滚提交记录_git 回滚提交
7
Druid配置错误导致未授权访问漏洞_poc-yaml-druid-monitor-unauth
8
webSQL_web sql工具 预制sql语句
9
浅谈全国大学生智能车竞赛-摄像头组图像处理及控制算法_智能汽车竞赛负压镜头组代码
10
准确!!!Centos8快速安装PG14,并且自定义数据目录和配置修改_centos 8 postgresql 14安装
当前位置:
article
> 正文
数字集成电路设计(六、Verilog HDL高级程序设计举例)_verilog hdl高级数字设计
作者:笔触狂放9 | 2024-04-15 16:56:27
赞
踩
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博客】
推荐阅读
article
好物分享:
FPGA
实现
SDI
视频
编解码
的
方案设计
汇总_sdi
编解码
verilog
...
好物分享:
FPGA
实现
SDI
视频
编解码
的
方案设计
汇总_sdi
编解码
verilog
sdi
编解码
verilog
...
赞
踩
article
【
verilog
】
多功能
数字钟
的
设计
_
多功能
数字钟
verilog
...
Verilog
多功能
数字钟
的
设计
_
多功能
数字钟
verilog
多功能
数字钟
verilog
实验...
赞
踩
article
verilog
学习心得_
verilog
实验报告
心得体会...
最近倒腾 FPGA, 以下为个人心得 :硬件电路分三种 , 纯逻辑电路 , 例如 不带时钟的纯与或门构成的电路 , 比如...
赞
踩
article
数字
逻辑与计算机设计实验
FPGA
数字
钟
(
Verilog
)_
数码管
24小时计数器
verilog
...
数字
逻辑与计算机设计实验
FPGA
数字
钟
(
Verilog
)_
数码管
24小时计数器
verilog
数码管
24小时计数器ver...
赞
踩
article
FPGA
实验报告
Verilog
HDL:7人
表决器
巴克码信号
发生器
FPGA
数字时钟_七人
表决器
...
Verilog
HDL实现:7人
表决器
巴克码信号
发生器
多功能数字时钟_七人
表决器
verilog
程序七人
表决器
veri...
赞
踩
article
《
数字
IC:
Verilog
》5.2
时钟
简介_
verilog
组合
逻辑
怎么产生
时钟
...
关键词:
时钟
源,
时钟
偏移,
时钟
抖动,
时钟
转换时间,
时钟
延时,
时钟
树,双边沿
时钟
几乎稍微复杂的
数字
设计都离不开
时钟
。
时钟
也...
赞
踩
article
【
verilog
】设计一个测试文件,
产生
一个周期为
2
微秒,
占空比
为
3
:
1的
时钟
信号_
verilog
产...
〇、前情提要帮可爱的涛涛看题,顺便复习一下
verilog
。参考:Verilog测试:TestBench结构https
:
/...
赞
踩
article
Verilog-实现
时钟
分
频
(
1KHZ
、奇、偶
分
频
,
占空比
为
50%
)_
50mhz
分
频
1hz是几
分
频
...
由时序图看出分别用
时钟
上升沿和下降沿得到高电平:低电平 = 4 :3,然后将两者相与就可以得到7
分
频
占空比
为
50%
的
时钟
...
赞
踩
article
verilog
设计
一个
电子钟
_
verilog
谣言
设计
时钟
...
Verilog hdl 语言
设计
电子
时钟
基于 Verilog hdl 语言
设计
电子
时钟
,实现计时、调整时间、重新清零功能...
赞
踩
article
Verilog
-实现使用
计数器
得到特定时间的高
脉冲
信号
_
verilog
产生
脉冲
信号
...
本篇博客主要介绍:使用
计数器
来得到自己想要的的一段
脉冲
信号
。_
verilog
产生
脉冲
信号
verilog
产生
脉冲
信号
...
赞
踩
article
【
FPGA
/
verilog
-入门学习2】
verilog
生成
上升
沿
下降
沿
脉冲_
时序电路
verilo...
使用脉冲边
沿
检测法设计一个上
下降
沿
检测功能。_
时序电路
verilog
程序表示
上升
沿
和
下降
沿
时序电路
verilog
程序表示...
赞
踩
article
IC
设计
--
verilog
--单
脉冲
的
产生
_
verilog
产生
脉冲
信号...
在IC
设计
中,很多时候我们需要
产生
单周期
脉冲
来作为启动信号。单
脉冲
产生
很简单:1、 输入信号signal_in延迟1个周...
赞
踩
article
Verilog
:【4】
脉冲
发生器(
pulse
_
gen
.sv)_
verilog
产生
脉冲
信号
...
通过设置参数cntr_max与cntr_low,可以产生任意周期数与占空比的
脉冲
信号
。_
verilog
产生
脉冲
信号
ver...
赞
踩
article
verilog
之定时
计数
--
任意
分频
、任意宽度
脉冲
、
复位
信号产生、置位/清零、PWM波形_
timer
...
verilog
之定时
计数
器用法
--
分频
、
复位
延时、
脉冲
展宽、置位/清零Timer的重要性
分频
器
复位
延时
脉冲
展宽置位/清零...
赞
踩
article
优秀
的
Verilog
/
FPGA
开源项目介绍(十四)- 使用
FPGA
实现
LeNet
-
5
深度
神经网络
...
优秀
的
Verilog
/
FPGA
开源项目介绍(十四)- 使用
FPGA
实现
LeNet
-
5
深度
神经网络
模型简介
LeNet
-...
赞
踩
article
FPGA
常用
接口协议
--
UART
_通用异步
收发器
fpga
verilog
hdl...
UART
接口协议
是一种比较简单、非常常用的一种
接口协议
,使用它的场景很常见,是我们学习
FPGA
一定要会的
接口协议
_通用异...
赞
踩
article
FPGA
协议
篇:
UART
通信
及
Verilog
最易懂实现方式/通用于任何工程/带握手信号 ----UA...
UART
(Universal Asynchronous Receiver/Transmitter)是一种通用的
异步
收发传...
赞
踩
article
FPGA实现
CLAHE
算法
(
Verilog
)_
clahe
fpga
...
在介绍
CLAHE
算法
之前必须要先提一下直方图均衡化,直方图均衡化
算法
是一种常见的图像增强
算法
,可以让像素的亮度分配的更加...
赞
踩
article
Verilog
inout
端口
使用
和仿真_
inout
端口
可以定义为
reg
类型
...
可选的:
inout
端口
作为输入时,必须有一个
reg
类型
的缓冲变量来存储输入的值,不能直接
使用
inout
端口
的值。inou...
赞
踩
article
【
Verilog
】
inout
端口
信号的
使用
_
verilog
inout
...
芯片的许多外部引脚
使用
输入式来节省管脚。通常,当信号线用于双向数据传输(例如总线)时,
使用
inout
类型。也就是说,...
赞
踩
相关标签
fpga开发
视频编解码
SDI
verilog
同步
编程语言
verilog设计
单脉冲的产生
IC设计
Vivado
System Verilog
Verilog
硬件设计
fpga
神经网络
python
java
人工智能
深度学习