全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 可编程逻辑 >

FPGA学习系列:6.组合逻辑和时序逻辑

时间:2018-05-31 11:40

人气:

作者:admin

标签:

导读:设计背景: Verilog HDL语言分为面向综合和面向仿真两大类语句,且可综合语句远少于仿真语句,读者可能会有可综合设计相对简单的感觉。然而事实刚好与此相反,这是因为:首先,可...

设计背景:

Verilog HDL语言分为面向综合和面向仿真两大类语句,且可综合语句远少于仿真语句,读者可能会有可综合设计相对简单的感觉。然而事实刚好与此相反,这是因为:首先,可综合设计是用来构建硬件平台的,因此对设计的指标要求很高,包括资源、频率和功耗,这都需要通过代码来体现;其次,在实际开发中要利用基本Verilog HDL语句完成种类繁多的硬件开发,给设计人员带来了很大的挑战。所有的仿真语句只是为了可综合设计的验证而存在。为了让读者深入地理解可综合设计、灵活运用已学内容,本章将可综合设计中的基本知识点和难点提取出来,融入Verilog HDL语法以及开发工具等诸多方面,以深入浅出的方式向读者说明设计中的难点本质

设计原理:

本次的设计主要是用来理解组合和时序逻辑的关系和写法,通过描述组合和时序逻辑电路来仿真出对用的仿真波形,然后来分析其逻辑特点和相应的关系。

设计架构图:

image.png

设计代码:

组合逻辑设计模块

0modulestudy(data_1,data_2,data_out);//端口列表

1

2 inputdata_1,data_2;//输入

3 outputregdata_out;//输出

4

5 //描述一个组合逻辑电路

6 always@(*)

7 begin

8 data_out =data_1 &&data_2;//与逻辑

9 end

10

11endmodule

测试模块

0`timescale1ns/1ps

1

2moduletb;

3

4 regdata_1,data_2;//定义输入寄存器

5 wiredata_out;//定义输出线型

6

7 study study_dut(//设计模块端口例化

8 .data_1(data_1),

9 .data_2(data_2),

10 .data_out(data_out)

11 );

12

13 initialbegin//描述数据流的变化

14 data_1 =0;data_2 =0;

15 #200

16 data_1 =1;data_2 =0;

17 #200

18 data_1 =0;data_2 =1;

19 #200

20 data_1 =1;data_2 =1;

21 #200

22 data_1 =0;data_2 =0;

23 #200

24 $stop;//系统任务停止

25 end

26

27endmodule

组合逻辑仿真图:

image.png

在仿真波形中可以清楚的看到输入数据流的变化顺序,数据翻转后,输出立马改变没有延迟。

时序逻辑设计模块

0modulestudy(clk,data_1,data_2,data_out);//端口列表

1

2 inputclk,data_1,data_2;//输入

3 outputregdata_out; //输出

4

5 //描述一个组合逻辑电路

6 always@(posedgeclk)

7 begin

8 data_out <=data_1 &&data_2;//与逻辑

9 end

10

11endmodule

测试模块

0`timescale1ns/1ps

1

2moduletb;

3

4 regclk,data_1,data_2;//定义输入寄存器

5 wiredata_out;//定义输出线型

6

7 study study_dut(//设计模块端口例化

8 .clk(clk),

9 .data_1(data_1),

10 .data_2(data_2),

11 .data_out(data_out)

12 );

13

14 initialbegin//描述数据流的变化

15 clk =1;data_1 =0;data_2 =0;

16 #200.1

17 data_1 =1;data_2 =0;

18 #200.1

19 data_1 =0;data_2 =1;

20 #200.1

21 data_1 =1;data_2 =1;

22 #200.1

23 data_1 =0;data_2 =0;

24 #200

25 $stop;//系统任务停止

26 end

27

28 always#10clk =~clk;

29

30endmodule

时序逻辑仿真图:

image.png

在仿真中可以清楚的看到,在时序逻辑中,我们或综合处寄存器,也就是说得到的数据会在寄存器中存一个上升沿,因为用的是上升沿触发,在波形中一看到。当两个输入都为高电平的时候输出也应该为高电平,可是没有立马的变为高电平,要等下一个上升沿来了才能变为高电平。

这样就直观的看清楚了组合和时序逻辑综合出的波形的差距,也就是一个有综合出是线型,一个是寄存器。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信