我是靠谱客的博主 孝顺砖头,最近开发中收集的这篇文章主要介绍Verilog RTL 代码设计,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

通过11个TL小型电路模块的代码编译,观察电路的RTL结构和波形仿真的时序,快速了解如何设计基本的电路组件。

1.做一个4选1的mux,并且进行波形仿真,和2选1的mux对比,观察资源消耗的变化;

Verilog代码如下:

RTL视图如下:

波形仿真结果如下:

资源消耗如下:

对比2选1的mux(如下图),可以看出4选1的mux实际上就是在2选1的mux上进行拓展,选用2位的控制信号控制4位输入信号择输出,资源消耗较2选1的mux要多。

 

2.编写一个4X4路交叉开关的RTL,然后编译,看RTL View 比较2x2与4x4之间消耗资源的区别。通过对比资源,你有什么结论?

Verilog代码如下:

RTL视图如下:

波形仿真结果如下:

资源消耗如下:

对比2X2的交叉开关(如下图),可以看出4X4的交叉开关消耗资源成倍增长,2X2路的交叉开关核心思想就是使用2个输出分别对应1个1位的控制信号,选择该输出哪一个输入信号。如此,则每个输出对应一个2位的控制信号,从4个输入信号中选择一个进行输出,然后并联输出。

 

3.编写一个8输入的优先编码器,然后编译,看RTL View

Verilog代码如下:

RTL视图如下:

波形仿真结果如下:

4.

  • 编写一个4-16的译码器,编译
  • 和3-8译码器对比资源开销
  • 看RTL View

Verilog代码如下:

 

RTL视图如下:

波形仿真结果如下:

资源消耗如下:

对比下图(3-8译码器资源资源消耗图),输入多了一位、输出多了八位,资源损耗几乎多了一倍,由此可知,资源消耗主要与输出位数正相关。

5.

  • 把加法器的输出信号改成4比特位宽,编译,波形仿真。观察输出结果,说出输出和输入的对应关系。
  • 把加法器的输入信号改成8比特位宽,编译,波形仿真。观察加法器的输出延迟,和4比特输入位宽的情况对比,你有什么结论,为什么?

1)Verilog代码如下:

波形真结果如下:

如图可知,输出存在时延,且当正确结果大于15后只输出正确结果的后4位,如IN1输入为11,IN2输入为7时,OUT最终显示8。

2)Verilog代码如下:

波形真结果如下:

输出时延稍大于4输入的无符号加法器。

 

6.把加法器的输出信号改成4比特位宽,编译,波形仿真。观察输出结果,观察输出结果在什么时候是正确的?把加法器的输入信号改成8比特位宽,编译,波形仿真。观察加法器的输出延迟,和4比特输入位宽的情况对比,你有什么结论,为什么?

1)Verilog代码如下:

波形真结果如下:

 

2)Verilog代码如下:

波形真结果如下:

其基本原理与无符号加法器相同,只不过其运算法则变为补码运算。

 

7.不改变流水线的级数,把加法器的输入信号改成8比特位宽,编译,波形仿真,和不带流水线的情况对比一下,你有什么结论? 在8比特输入位宽的情况下,在输入上再添加一级流水线,观察编译和仿真的结果,你有什么结论?

1)Verilog代码如下:

RTL视图如下:

波形真结果如下:

与不加流水线的加法器相比,带流水线的加法器即在加法器的输入与输出都连接了D触发器,有效的减少了组合逻辑的竞争与冒险,从而明显减少了“毛刺”的长度。而流水线的级数越高,毛刺也随之越短,但输出的时延也会相应的对一个时钟周期。

2)Verilog代码如下:

RTL图如下:

波形仿真结果如下:

8.

  • 改变乘法器的输入位宽为8比特,编译,波形仿真,观察信号毛刺的时间长度。
  • 选一款没有硬件乘法器的FPGA芯片(例如Cyclone EP1C6)对比8比特的乘法器和加法器两者编译之后的资源开销(Logic Cell的数目)
  • 编写一个输入和输出都有D触发器的流水线乘法器代码,编译后波形仿真,观察组合逻辑延迟和毛刺的时间,和不带流水线的情况下对比。

1)Verilog代码如下:

RTL图如下:

波形仿真结果如下:

2)Verilog代码如下:

资源消耗如下:

对比下图(8比特的加法器)可见,无硬件乘法器芯片的无符号乘法器硬件资源消耗非常巨大。

3)Verilog代码如下:

波形仿真结果如下:

9. 

请完成以下设计实验,编译电路并且进行波形仿真。

  • 设计一个最简单的计数器,只有一个CLK输入和一个OVerflow输出,当计数到最大值的时钟周期CLK输出1
  • 设计复杂的计数器,和本例相似,带有多种信号,其中同步清零CLR的优先级最高,使能EN次之,LOAD最低。

1)Verilog代码如下:

RTL图如下:

波形仿真结果如下:

2)Verilog代码如下:


RTL视图如下:


波形仿真结果如下:


 
10.  

设计一个用于识别2进制序列“1011”的状态机

  • 基本要求:
  • 电路每个时钟周期输入1比特数据,当捕获到1011的时钟周期,电路输出1,否则输出0
  • 使用序列101011010作为输出的测试序列
  • 扩展要求:
  • 给你的电路添加输入使能端口,只有输入使能EN为1的时钟周期,才从输入的数据端口向内部获取1比特序列数据。

1)Verilog代码如下:

RTL视图如下:

2)Verilog代码如下:


状态转移图及表达式如下:

波形仿真结果如下:


 
11. 设计一个如本节“电路描述”部分的“带加载使能和移位使能的并入串出”的移位寄存器,电路的RTL结构图如“电路描述”部分的RTL结构图所示。
Verilog代码如下:

RTL视图如下:

波形仿真结果如下:
 
 
 
 

 

 

 

 

 

最后

以上就是孝顺砖头为你收集整理的Verilog RTL 代码设计的全部内容,希望文章能够帮你解决Verilog RTL 代码设计所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部