HBU硬件描述语言十:中期考核实验题目

本文介绍了VHDL语言的中期考核实验,涉及四个含有错误的VHDL源码,包括计数器和编码器设计。实验要求学生修复错误,遵循命名规则,并通过分析仿真结果验证设计。
摘要由CSDN通过智能技术生成

硬件描述语言十:中期考核实验题目

1、实验目的:考核学生学习VHDL语言的效果。

2、实验环境:PC个人计算机、Windows操作系统、Quartus II集成开发环境软件。

3、实验要求:Error_Find_clear文件夹中有四个含有错误的VHDL语言源码文件及相应的仿真波形文件,修改源代码并完成实验步骤所要求的设计流程,得到仿真结果并加以分析。

4、实验步骤:①建立工程、②编辑代码、③编译及修改源码文件中的错误、④用已经提供的仿真波形文件进行仿真、⑤根据仿真结果分析模块的功能。

第一个ff_d:

第二个counter12:

第三个counter15we:

第四个encounter__83(尸体名字应该为encounter_83,两个_违反规则):

  • 实验数据及结果分析:

第一个ff_d:

第二个counter12:

第三个counter15we:

第四个encounter__83(尸体名字应该为encounter_83,两个_违反规则):

通过对多组实验数据的分析,判断其符合预期结果。如图所示,并且结果修改完成后符合实验预期。

  • 实验结论: 

这四个实验代码均有错误,并且有很多都是小的错误点如单引号与双引号之间转换出错等,还有是否调用了所用函数包的问题(如第二个实验use ieee.std_logic_arith.all算术集),而且项目名需要和vhdl文件的名字一样,且项目名命名时必须符合规则,不能出现两条_,使用位矢量时必须注明位宽。

  • 总结及心得体会:

通过这次实验,我意识到了自己的代码能力仍然不足,仍需努力,关于VHDL语法的运用也不是很熟练,仍需要多加学习和练习。

  • 附录(实验源码)

第一个ff_d

library ieee;

use ieee.std_logic_1164.all;

entity ff_d is

port

(

clk,set,clr,d : in std_logic;

q,nq : buffer std_logic     --out改成buffer

);

end entity;

architecture rtl of ff_d is

begin

process (clk,clr)

begin

if (clr='0') then

q <= '0';

else if( clk'event and clk='1') then  

if (set = '0' )then

q <= '1';

else          

q <= d;

end if;

end if;

end if;

nq <= not q;             --nq为q的非,永远为q反

end process;

end rtl;

第二个counter12

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;  --有这个算数包集合才可以使用数据转换函数conv_std_logic_vector,将数据转成要求位数的二进制

entity counter12 is

port

(

clk,clr : in std_logic;

q : out std_logic_vector(3 downto 0);

co     : out std_logic

);

end entity;

architecture rtl of counter12 is

signal q_s: integer range 0 to 15:=0;   --q-s都要改为q_s,q-s不符合命名规则,-为标识符

begin

process (clk)

begin

if (clk'event) and (clk='1') then

if clr = '0' then

q <= "0000"; co <= '0';

else

if (q_s>=11) then

q_s <=0; co <= '1';

else

q_s <= q_s +1; co <= '0';

end if;

end if;

end if;

q<=conv_std_logic_vector(q_s,4);--数据类型转换,把integer实数转换为几位的二进制数组

end process;

end rtl;

第三个counter15we

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity counter15we is

port

(

clk,we : in std_logic;

q : inout std_logic_vector(3 downto 0);

co     : out std_logic

);

end entity counter15we;

architecture rtl of counter15we is

signal q_s : std_logic_vector(3 downto 0);

begin

process (clk)

begin

if we = '1' then

q <= q_s;

     else

q <= "ZZZZ";

end if;

if (clk'event and clk='1') then

if(we = '0') then

q_s <= q; co <= '0';

elsif(we/='0')then --当we不为0时

if(q_s="1111") then

q_s <= "0000";--q_s是4位数组,给q_s赋值需要双引号

co <= '1';

else

q_s <= q_s + '1'; co <= '0';

end if;

end if;

end if;

end process;

end rtl;

第四个encounter__83(尸体名字应该为encounter_83,两个_违反规则)

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY encode_83 IS     --错误点在名字中有两个__,违反命名规则,所以改成一个_

PORT

(

en,i0,i11,i2,i3,i4,i5,i6,i7 : IN STD_LOGIC;

d : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);

nul,inv : OUT STD_LOGIC

);

END encode_83;

ARCHITECTURE rtl OF encode_83 IS

SIGNAL i : STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

i <= i0 & i11 & i2 & i3 & i4 & i5 & i6 & i7;

PROCESS (en, i)

BEGIN

if (en ='0')THEN      --en不是int类型,需要输入0或1时要加引号

d<= "ZZZ";

nul<='Z';

inv<= 'Z';

ELSE

case i is

WHEN "01111111" => d <= "000"; nul <= '0'; inv <= '0';

WHEN "10111111" => d <= "001"; nul <= '0'; inv <= '0';

WHEN "11011111" => d <= "010"; nul <= '0'; inv <= '0';

WHEN "11101111" => d <= "011"; nul <= '0'; inv <= '0';

WHEN "11110111" => d <= "100"; nul <= '0'; inv <= '0';

WHEN "11111011" => d <= "101"; nul <= '0'; inv <= '0';

WHEN "11111101" => d <= "110"; nul <= '0'; inv <= '0';

WHEN "11111110" => d <= "111"; nul <= '0'; inv <= '0';

WHEN "11111111" => d <= "111"; nul <= '1'; inv <= '0';

when others =>d<="000";nul<='0';inv<='0';--要写上这个,说明其他情况的时候输出会是怎么样

END CASE;

END IF;

END PROCESS;

END rtl;

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值