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

描述

设计背景:

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

 

设计原理: 

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

 

设计架构图:

时序逻辑 

设计代码:

组合逻辑设计模块

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

1 

2  input data_1, data_2;  //输入

3  output reg data_out;   //输出

4 

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

6  always @ (*) 

7  begin

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

9  end

10

11 endmodule 

 

测试模块

0 `timescale 1ns / 1ps

1 

2 module tb;

3 

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

5  wire data_out;        //定义输出线型

6 

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

8   .data_1(data_1), 

9   .data_2(data_2),

10  .data_out(data_out)

11 );

12

13 initial begin        //描述数据流的变化

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

27 endmodule 

 

组合逻辑仿真图:

时序逻辑

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

 

 

 

时序逻辑设计模块

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

1 

2  input clk, data_1, data_2;  //输入

3  output reg data_out; //输出

4 

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

6  always @ (posedge clk) 

7  begin

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

9  end

10

11 endmodule 

 

测试模块

0 `timescale 1ns / 1ps

1 

2 module tb;

3 

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

5  wire data_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 initial begin        //描述数据流的变化

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 #10 clk = ~clk;

29

30 endmodule 

 

时序逻辑仿真图:

时序逻辑 

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

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分