名称:并行到串行和串行到并行转换器VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
设计项目
该项目将涉及 VHDL 中并行到串行和串行到并行转换器的开发和仿真。数字系统通常会获取并行字节的数据,并通过单根导线传输它们,以节省导线面积,减少串扰影响,提高时钟速度或保持设备之间的兼容性。该练习将介绍组件实例化以及在单个项目中使用多个 VHDL 模块文件。在 VHDL 中设计复杂的系统时,优良作法是将系统的功能块分布在多个 VHDL 模块上,从而增加了代码的易用性和功能。整个系统的示意图如图 1 所示。该图的不同 VHDL 模块,实体,组件,端口和信号起初可能会造混淆,因此在开始练习之前了解层次结构非常重要。在本实验中,我们将使用计数器,串行化转换器和反序列化转换器。计数器用于控制速率以及将数据放置到串行线或从串行线中删除数据的时间,并将成为串行化实体的组成部分。为了实现此目标,您应该完成以下任务序列。
1.创建一个新的 Quartus Prime 项目并调用项目 Lab_1。首先,我们将创建一个 4 位计数器,该计
数器将用作序列化和反序列化模块的计时器。将新的 VHDL 文件添加到项目。将此模块计数器命
名。如有必要,请参考上一个实验室的指导。创建一个测试平台以检查代码的功能。
2.确定您的计数器工作正常后,以与创建计数器相同的方式创建一个名为 parallelToSerial 的新
VHDL 模块。在此模块中,我们将这个实体设计为采用 8 位并行输入信号并将其转换为串行输出
格式,以便每个位将在 8 个时钟周期内通过 1 位宽的输出线传输。为了定时传输,我们将使用
之前创建的计数器模块。parallelToSerial 模块应具有一个 8 位输入端口,一个 clk 输入和一
个 std_logic 串行输出。
3. 为了整理并行到串行转换所需的时序,可以在此模块中实例化第 1 部分中创建的计数器。在这
段代码中,我们通过定义不同的二进制模式并使用 case 语句在状态之间进行切换来有效地创建
状态机。鉴于计数器模块具有 16 种可能的状态,并且在其计数端口上按顺序递增计数,因此我
们可以在每个二进制计数的不同情况之间切换。例如:
状态 1,“ 0001”:我们取第一个并行位 input_port(0),并将其放在串行输出端口
output_port 上。
状态 2,“ 0010”:我们将第二位 input_port(1)放在输出上,依此类推。
4. 一旦创建了转换代码,请生成一个测试平台,以在并行输入端口上加载字节“ 01010101”作
为激励,并且没有初始延迟,以确保代码正常工作并在 8 个周期内观察串行输出。
5. 最后一步是通过添加一个称为 serialToParallel 的新 VHDL 模块来创建反序列化模块。这
将与 parallelToSerial 模块几乎相同,除了将串行输入线上的当前位值分配给每个模块中
不同的并行输出位之外。
提供了顺序案例说明 通过计数器信号。 阻止 输出 来自的港
口
如果表示不完整的数据,则应定义一个单独的信号,以便在分配了 8 位之后将并行输出信号加载
到物理输出端口。一旦生成了 VHDL 模块,则复制 parallelToSerial 的行为描述可能是一个好的
开始。在仿真中验证您的设计。创建一个测试平台,并按如下所示加载串行输入线:
处理
开始
等到 clk_input ='1';
等待 clk_period;
DATAX 输入<=“0”;
等待 clk_period ;;
DATAX 输入<=“0”;
等待 clk_period;
DATAX 输入<=“0”;
等待 clk_period;
DATAX 输入<=“0”;
等待 clk_period;
DATAX 输入<=“0”;
等待 clk_period;
DATAX 输入<=“1”;
结束过程
6. 现在,您的项目中有了带有单独的测试台的序列化,反序列化和计数器模块。下一步是创
建另一个称为组合的 VHDL 模块,它将连接您创建的两个序列化模块。这样,您可以创建一
个测试平台,该测试平台将加载模块组合的 8 位并行输入并将其传输到 parallelToSerial
模块的输入。数据包将被序列化,然后根据连接到 serialToParallel 模块的信号发送出去。
该数据包将重新创建为并行信号,并在组合模块的 8 位输出端口上发送出去,如图 1 所示。
图 1.在一个名为 Combination 的 VHDL 模块中,将串行到并行和并行到串行模块组合在一起。
3
组合模块需要一个公共的 clk 端口以及一个 8 位输入和 8 位输出并行端口。实例化
parallelToSerial 和 serialToParallel 模块。然后,您只需要创建将组合模块的输入连接到
parallelToSerial 模块的输入,将该模块的输出连接到 serialToParallel 模块的输入,最后将
该模块的输出连接到组合的输出端口的信号。
7. 完成此操作后,为组合模块创建测试台,只需为输入端口提供“ 01010101”,然后在 8 个周期
后应观察到相同的输出。
1.工程文件
2.程序文件
3.程序编译
4.RTL图
5.程序仿真
5.1 Count仿真
testbench
仿真图
5.2 并转串
testbench
仿真图
5.3 串转并
testbench
仿真图
5.4 Combination
testbench
仿真图
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY combination IS PORT ( clk_in : IN STD_LOGIC;--输入clk parallel_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--输入并行数据 parallel_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--输出并行数据 ); END combination; ARCHITECTURE behaver OF combination IS --串转并模块 COMPONENT SerialToparallel IS PORT ( clk_in : IN STD_LOGIC; serial_in : IN STD_LOGIC; parallel_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END COMPONENT; --并转串模块 COMPONENT parallelToSerial IS PORT ( clk_in : IN STD_LOGIC; parallel_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0); serial_out : OUT STD_LOGIC ); END COMPONENT; SIGNAL serial_sig: STD_LOGIC:='0';--串行信号 BEGIN --调用串转并模块 SerialToparallel_UUT : SerialToparallel PORT MAP ( clk_in => clk_in, parallel_out => parallel_out, serial_in => serial_sig ); --调用并转串模块 parallelToSerial_UUT : parallelToSerial PORT MAP ( clk_in => clk_in, parallel_in => parallel_in, serial_out => serial_sig ); END behaver;
源代码
扫描文章末尾的公众号二维码