vhdl设计摘要
1. VHDL程序设计
完成100计数器的设计,计数值范围0~99(二进制 0000000~1100011,注意宽度7比特);并进行120个周期以上的波形仿真。
2. vhdl的简单alu设计
额,再设计之前首先要了解ALU的特性,最重要的一个特性就是选择性执行运算,即时说一次执行一个选择的运算。
所以再看楼主的程序,使用的是多个并行的PROCESS来实现,这种方法我觉得就有问题,并且用两个运算单位X和Y来作为RPOCESS的敏感变量就更有问题了。。。最重要的是要记住,ALU执行的不是顺序逻辑,而是组合逻辑,所以不要加PROCESS,因为加了PROCESS就引入了时间的概念,就成了顺序逻辑了。
我把我写的一个ALU发到楼主邮箱了,是VHD文件,这个ALU可以实现9种运算,当然也包括加减乘除,其余的是一些逻辑运算,楼主也可以看看,这个ALU是完美运行,并且我GENERIC了一个变量来控制运算的位数,程序里我我取得是4位,楼主可以根据自己需求来改
PS:你的邮箱是不是打错了啊。。。应该是352016927吧。。。我说怎么一直发送失败。。。
好了,呵呵,说了这么多,希望对你有所帮助啊
3. 简述VHDL语言基本结构
VHDL语言的基本结构
VHDL语言通常包括库说明、实体说明、结构体说明3个部分。
library ieee;
use ieee.std_logic_1164.all; --库说明
entity dff1 is
port(clk,d:in std_logic;
q:out std_logic);
end dff1; --实体说明
architecture rtl of dff1 is
begin
process(clk)
begin
if(clk'event and clk='1')then
q<=d;
end if;
end process;
end rtl; --结构体说明
VHDL提供5个库,IEEE库,STD库,VITAL库,自定义库和WORK库
IEEE库包含的常用程序包有:
std_logic_1164:常用数据类型(其中有std_logic、std_logic_vector数据类型)和函数的定义、各种类型转换 函数及逻辑运算。
std_logic_arith:它在std_logic_1164的基础上定义了无符号数unsigned、有符号数signed数据类型并为其定义了相应的算术运算、比较,无符号数unsigned、有符号数signed及整数integer之间转换函数。
std_logic_unsigned和std_logic_signed:定义了integer数据类型和std_logic及std_logic_vector数据类型混合运算的运算符,并定义了一个由std_logic_vector型到integer型的转换函数。其中std_logic_signed中定义的运算符是有符号数运算符。
STD库是标准库,包含两个程序包:
standard:定义了基本数据类型、子类型和函数及各种类型的转换函数等。
textio文本程序包:定义了支持文本文件操作的许多类型和子程序等。在使用textio程序包之前,需要先写上use语句use std.txtio.all。
VITAL库:使用VITAL可以提高门级时序仿真的精度,一般在VHDL语言程序进行仿真时使用。主要包含两个程序包。
VITAL_timing:时序仿真包
VITAL_primitives:基本单元程序包
WORK库,是现行的工作库,设计人员设计的VHDL语言程序的编译结果不需任何说明,都将存放在WORK库中。WORK库可以是设计者个人使用,也可提供给设计组多人使用。
库说明的语法结构
library 库名;
use 库名.程序包名.项目名;
###########################################################################################
实体说明
实体的电路意义相当于器件,在电路原理图上相当于元件符号,他是完整的、独立的语言模块
实体说明语句的语法:
entity 实体名 is
port(端口1: 端口方式1 端口类型1;
端口2: 端口方式2 端口类型2;......);
end 实体名
端口方式有五种:
in 输入类型 信号从该端口进入实体
out 输出类型 信号从实体内部经该端口输出
inout 输入输出类型 信号既可以从该端口输入也可以输出
buffer 缓冲型 与out类似但在结构体内部可以作反馈
linkage 无制定方向,可以与任何方向的信号连接
############################################################################################
结构体说明
结构体会给模块的具体实现,指定输入与输出之间的行为。
结构体语法如下:
architecture 结构体名称 of 实体名 is
结构体说明部分;
begin
结构体并行语句部分;
end 结构体名称;
结构体说明:对结构体内部所使用的信号、常数、数据类型和函数进行定义。
结构体并行语句:具体确定各个输入、输出之间的关系,描述了结构体的行为,是一组并行处理语句。
结构体对实体的输入输出关系可以用3中方式进行描述,即行为描述(基本设计单元的数学模型描述)、寄存器传输描述(数据流描述)、和结构描述(逻辑元器件连接描述)。不同的描述方式,只体现在描述语句上,而框架是完全一样的
4. 用vhdl设计组合逻辑要注意什么
注意process中。所有输入信号都要加上。或者直接不用process语句。process只用来写时序电路
5. VHDL设计
楼主的意思比较简单 是两道题吧?
1,代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity ornot3 is
port( a0,a1,a2 :in std_logic; ---3 inputs
y:out std_logic --- output
);
end entity ornot3;
architecture arc of ornot3 is
begin
process(a0,a1,a2)
begin
y<= not(a0 or a1 or a2);
end process;
end arc;
2.代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity sel2 is
port( sel :in std_logic; ---3 inputs
a0,a1: in std_logic_vector(3 downto 0);
y:out std_logic_vector(3 downto 0) --- output
);
end entity sel2;
architecture arc of sel2 is
begin
process(a0,a1,sel)
begin
if sel = '0'then
y <= a0;
elsif sel = '1' then
y <= a1;
else y <= "ZZZZ";
end if;
end process;
end arc;
6. 用VHDL程序设计一个8选1数据选择器
LIBRARY IEEE;
USE IEEE.Std_logic_1164.ALL;
ENTITY Mux8 IS
PORT(sel:IN Std_logic_Vector(2 DOWNTO 0);
In_s:IN Std_logic_Vector(7 DOWNTO 0);
y:OUT Std_logic);
END Mux8;
ARCHITECTURE behave OF Mux8 IS
BEGIN
PROCESS(sel,In_s)
BEGIN
CASE sel IS
WHEN "111" => y <= In_s(7);
WHEN "011" => y <= In_s(6);
WHEN "101" => y <= In_s(5);
WHEN "100" => y <= In_s(4);
WHEN "011" => y <= In_s(3);
WHEN "010" => y <= In_s(2);
WHEN "001" => y <= In_s(1);
WHEN "000" => y <= In_s(0);
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END behave;
将上面描述中的全角字符改成半角字符后,就可以通过编译了。
流水灯我明白什么意思,我肯定好的
8. VHDL语言是一种结构化设计语言,一个设计(电路模块)包括实体与结构体两部分,实体描述(),结构体描述()
实体描述电路的输入,输出关系。结构体描述电路的功能
9. VHDL程序设计的基本结构主要包括哪些方面简要说明!
只要学会如何声明“实体”和“结构体”,就可以描述一个硬件模块了。
在实体声明中,先学会如何声明端口就够了;在结构体中,先学会行为描述,即:用顺序语句描述电路模块的真值表或者状态图,再用进程语句将这些顺序语句包装一下放入结构体中就行。
VHDL不难学,只要别强求一口吃成个胖子。