数字分接器设计VHDL代码Quartus仿真
名称:数字分接器设计VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
数字分接器的设计任务
利用所学过的《通信原理》以及《电子设计自动化》(EDA技术)的基本
知识完成数字分接器的设计。、要求
接收数字解调器输岀的串行数据,根据同步模块产生的帧同步码和位同步码(巴已知的信号),将根据按字复接方式将输入码元分成4路信号,输岀为三路并行的信息码。输入数据结构如下

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
数字分接器设计
一、设计任务
本设计任务是利用所学过《通信原理》以及《电子设计自动化》(EDA技术)的基本知识完成数字分接器的设计。
任务要求是接收数字解调器输出的串行数据,根据同步模块产生的帧同步码和位同步码(已知的信号),将根据按字复接方式将输入码元分成4路信号,输出为三路并行的信息码。输入数据结构如下:

任务需求分析如下:
系统输入的信息数据信号有2个,一个是位同步码,一个是位同步数据,一个位同步码对应一个串行的位同步数据。当有串行输入的位同步数据为“1110010”时表示是帧同步码,即为以帧的起始位置,后面跟了3个信息码。其中信息码1一共9位,信息码2一共8位,信息码3一共8位,本系统任务就是检测帧同步码,然后提取出后面的3个信息码最后并行输出3路信息码。
二、系统工作原理
系统首先需要检测帧同步码,检测方式采用移位寄存器设计,帧同步码为“1110010”共7位,因此使用一个7bit位宽的移位寄存器,来一次位同步数据将数据移入移位寄存器的最低位,当移位寄存器得值为“1110010”时表示检测到帧同步码。
检测到帧同步码后,需要依次提取出信息码1、2、3,对此可以采用计数器来实现。当检测到帧同步码后启动计数器,由于信息码1共9位,信息码2共8位,信息码3共8位,因此一共有9+8+8位=25位,所以计数器需要计数到25。
当计数器值为1~9时对应信息码1,当计数器值为10~17时对应信息码2,当计数
器值为18~25时对应信息码3。
三、系统建模
根据系统工作原理,设计系统的工作流程图如下所示:

本系统设计采用行为描述方式,设计语言为VHDL,使用设计软件为QuartusII,按照任务要求,定义系统的端口如下表所示:
程序端口描述如下:

检测帧同步码的移位寄存器建模如下:

计数器建模如下:

一、VHDL程序描述
略
程序编译成功如图:

程序综合实现后的FPGA资源占用情况如下图所示:

五、电路仿真波形及说明
对VHDL代码进行仿真,仿真图如下:

下图为检测到帧同步码1110010时的图,可以看到frame_sync信号等于1110010,然后count_en变为高电平开始计数,count_data为计数值。

下图为根据计数值提取对应信息码1,可以看到提取的信息码1为101101011

下图为根据计数值提取对应信息码2,可以看到提取的信息码2为10011000
下图为根据计数值提取对应信息码3,可以看到提取的信息码3为10101011

部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY receiver IS PORT ( clk : IN STD_LOGIC; reset_p : IN STD_LOGIC; bit_sync : IN STD_LOGIC;--位同步码 bit_data : IN STD_LOGIC;--位同步数据 information_code1 : OUT STD_LOGIC_VECTOR(8 DOWNTO 0);--9位信息码1 information_code2 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);--8位信息码2 information_code3 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--8位信息码3 ); END receiver; ARCHITECTURE behave OF receiver IS SIGNAL frame_sync : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0000000"; SIGNAL count_en : STD_LOGIC := '0'; SIGNAL count_data : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL bit_sync_buf : STD_LOGIC := '0'; SIGNAL count_data_buf : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL code_1 : STD_LOGIC_VECTOR(8 DOWNTO 0) := "000000000"; SIGNAL code_2 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL code_3 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; BEGIN PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (reset_p = '1') THEN frame_sync <= "0000000"; ELSIF (bit_sync = '1') THEN frame_sync <= (frame_sync(5 DOWNTO 0) & bit_data);--移位寄存器,检测帧同步码 END IF; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (reset_p = '1') THEN count_en <= '0'; ELSIF (frame_sync = "1110010") THEN--检测到1110010帧同步码开始计数 count_en = "00011001") THEN count_en <= '0'; END IF; END IF; END PROCESS;
代码文件(付费下载):
![]()
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 数字分接器设计VHDL代码Quartus仿真
发表评论
模板文件不存在: ./template/plugins/comment/pc/index.htm