FPGA学习系列:7. 串并转换

描述

设计背景:

Verilog语法中很多情况都用到了串并转化的思想,旨在与提升运算和芯片运行的速度,串行转并行已经成为设计中不可缺少的一种思维。

 

设计原理: 

本次的设计主设计一个8位的串并转化,意思就是当输入8个数据的时候,我们把这8个串行数据转化为8位的并行数据然后输出出来。也就是需要一个8位的寄存器,来一个数据存到对应的位上,然后输出出来就完成了本次设计。

 

设计架构图:

串并转换

 

设计代码:

设计模块

0 module study(clk, rst_n, data, data_out); //端口列表

1 

2  input clk, rst_n;            //时钟,复位输入

3  input data;                  //输入数据

4 

5  output reg [7:0] data_out;

6 

7  reg [3:0] count; 

8  reg [7:0] temp;

9 

10 always @ (posedge clk)     //时序逻辑

11  if(!rst_n)

12   begin

13    data_out <= 0;

14    temp <= 0;

15    count <= 0;

16   end

17  else if(count < 8)        //计数表示只接8个数据

18   begin

19    temp <= {temp[6:0],data};  //移位寄存器

20    count <= count +1'b1;

21   end

22  else

23   begin

24    data_out <= temp;   //接到后输出

25   end

26

27 endmodule 

测试模块

0 `timescale 1ns / 1ps //时标

1 

2 module tb();

3 

4  reg clk, rst_n;

5  reg data;

6 

7  wire [7:0] data_out;

8 

9  study study_dut(       //设计例化

10  .clk(clk), 

11  .rst_n(rst_n),

12  .data(data),

13  .data_out(data_out)

14 );

15

16 initial  begin

17  clk = 1;  

18  rst_n = 0;  //复位

19  data = 0;

20 #200 rst_n = 1;      //不复位

21  data = 1;        //模拟数据输入

22 #20 data = 0;

23 #20 data = 1;

24 #20 data = 0;

25

26 #20 data = 0;

27 #20 data = 1;

28 #20 data = 0;

29 #20 data = 1;

30

31 #200 $stop;

32 end

33

34 always #10 clk =~clk;    //模拟晶振时钟

35

36 endmodule 

 

仿真图:

串并转换 

在测试中模拟数据输入时1010 0101,然后输出是一个并行数据,那么通过看仿真时序,清楚的看到输出是8位的并行数据,本次设计正确.

同样大家可以自己推理设计出并转串的逻辑电路来。

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

全部0条评论

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

×
20
完善资料,
赚取积分