v3学院教你FPGA_串并/并串转换

标签:
fpgav3学院xilinx培训串并转换 |
写在前面的话
串并/并串转换是FPGA设计过程中的一个重要技巧,经常被用在高速数据流处理中,特别是在通信接口方面尤为重要。如UART串口协议、SPI串口协议、IIC串口协议都需要用到串并/并串转换。本节,大家一起来学习串并/并串转换的实现方法。
需求分析
并转串的设计思想是这样的:首先准备好一组寄存器,把需要发送的数据(并行数据)放到这个寄存器组里面,然后通过位拼接的移位方式把这个并行数据一位一位地发送给接收端,同时拉高标志信号en,当全部数据发送完之后,再把标志信号en拉低。
系统架构
表6-5模块端口描述表
端口名 |
端口说明 |
clk |
系统50MHz时钟输入 |
rst_n |
系统低电平复位 |
en |
数据转换标志信号 |
sda |
输出的串行数据 |
代码实现
1.并串转换模块代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
代码分析:我们首先定义了一个8位的数据寄存器sda_buf和一个控制移位的计数器counter,然后在电路复位的时候给sda_buf写入了一个8位的并行数据8’b1001_1101;第30~35行,我们拉高数据转换标志信号en,把并行数据sda_buf的最高位输出到sda,同时sda_buf进行左移操作,sda_buf中的数据就会以串行的方式一位一位的发送出去。第39~41行,移位结束的同时,计数器清零,数据转换标志信号en变为低电平,就完成了一次并行数据向串行数据的转换。
2.并串转换测试代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
3.并串转换仿真结果分析
如图所示,可以看到当数据转换标志信号en为高电平的时候,sda_buf中的数据从最高位开始输出,也就是sda开始输出串行数据,当sda_buf中的全部数据输出后的同时,数据转换标志信号en变为低电平,说明我们的设计正确。
4.串并转换
接下来,我们来学习串行数据转换成并行数据的设计实现技巧,由于我们已经有一个并转串的模块来输出串行数据,所以我们可以巧妙的利用这个模块。
我们在测试代码中加入一个串行数据转换成并行数据的模块,它的部件架构图如下(下面测试代码第24~41行):
http://s8/mw690/003wCLthzy7a76EWyqj97&690
修改后的测试代码如下:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
代码分析:我们首先定义了一个串行数据接收寄存器sda_reg,检测到数据转换标志信号en有效时,sda_reg通过位拼接的方式依次将并转串模块输出的串行数据sda移入到sda_reg的每一位(从低位到高位),从而实现串行数据向并行数据的转换。
仿真波形如图所示。
http://s7/mw690/003wCLthzy7a76JPZdA76&690
串并转换仿真结果
观察波形,可以看到当数据转换标志信号en为高电平的时候,sda_reg开始接收串行数据sda,当数据转换标志信号en为低电平的时,串行数据向并行数据的转换刚好结束,我们可以看出转换得到的并行数据sda_reg和发送出的并行数据sda_buf是完全相同的,说明我们的设计是正确的。
更多资料请关注官方微信号:
http://s15/mw690/003wCLthzy7a76Shweyde&690