一、实验要求:
(1)设计一个8位的序列信号发生器,序列码为“01011100”序列信号发生器
(2)对所设计的电路进行波形仿真验,并下载到实验板测试电路是否正确;
(3)用示波器观察产生的序列脉冲信号
二、实验内容:
(1)、序列脉冲发生器设计
创建VHDL文件,输入一下代码:
-- 相关库和软件包 library and package
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
-- 实体 entity
ENTITY senqgen8 is -- 实体名与文件名相同
PORT(
clk,clr: IN STD_LOGIC;
sout:out STD_LOGIC;
sync:out STD_LOGIC --这里没分号
);
END ENTITY senqgen8;
-- 结构体 architecture
ARCHITECTURE bhv of senqgen8 is
signal count :std_logic_vector(2 downto 0);
BEGIN
p1:process(clk,clr)
begin
if clr='1' then --异步清零
count<="000";
else
if (clk'event and clk='1') then --上升沿跳变
if count="111" then
count<="000";
else
count<=count+1;
end if;
end if;
end if;
end process;
p2:process(count)
begin
case count is
when "000"=>sout<='0';
when "001"=>sout<='1';
when "010"=>sout<='0';
when "011"=>sout<='1';
when "100"=>sout<='1';
when "101"=>sout<='1';
when "110"=>sout<='0';
when "111"=>sout<='0';
when others=> sout<='0';
end case;
end process;
p3:process(clk,clr,count)
begin
if clr='1' then --异步清零
sync<='0';
elsif count="000" then
sync<='1';
else
sync<='0';
end if;
end process;
end ARCHITECTURE bhv;
保存文件名为:senqgen8.VHD,并置顶编译通过(这步要注意)
创建器件符号:
(2)、设计设置LowFreqClk--产生时钟信号的器件
创建VHDL文件,输入一下代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY LowFreqClk IS
PORT(rst_n : IN STD_LOGIC;
Clk_50M : IN STD_LOGIC;
clk_1MHz : buffer STD_LOGIC);
END LowFreqClk;
ARCHITECTURE bhv OF LowFreqClk IS
BEGIN
PROCESS(Clk_50M,rst_n)
VARIABLE Count:INTEGER ;
BEGIN
IF rst_n = '1' then
Count := 0 ;
clk_1MHz <= '0';
ELSIF Clk_50M'EVENT AND Clk_50M='1' THEN
IF Count = 24 THEN
clk_1MHz <=not clk_1MHz;
Count := 0 ;
ELSE
Count := Count + 1;
END IF;
END IF;
END PROCESS ;
END bhv;
保存文件名为:LowFreqClk.VHD,并置顶编译通过(这步要注意)
创建器件符号:
(3)、设计电路图:
如下图:
(4)、波形仿真:
如图绘制:
编译,结果如下:
即为正确。
编译结果为:
(4)、引脚分配:
如图:
编译一遍。
(5)、示波器接线:
CH1 黄色、 CH2 青色
CH1两端接法如下:(勾上夹下)
CH2两端接法如下:(勾上夹下)
调整示波器参数:
结果如图:
(如果有帮助请点赞或评论支持,有问题请指正,其他问题请评论交流...)