在VHDL里面,进程语句是并行的,对不同的进程中同一信号赋值会出现multiple错误,如果你程序里面有用到时钟的话,可以利用时序的时差来对这信号赋值,比如说在上升沿对这一进程中信号赋值,在下降沿对另一进程中信号赋值,,或者你把这个信号一分为二,在两进程中用不同的信号或变量来表示!
写好后存盘 一 将设计项目设置成工程文件(PROJECT) 为了对输入的设计项目进行各项处理,必须将设计文件,设置成Project。如果设计项目由多个设计文件组成,则应该将它们的主文件,即顶层文件设置成Project。如果要对其中某一底层文件进行单独编译、仿真和测试,也必须首先将其设置成Projcet。即需要对哪个设计项目进行编译、仿真等 *** 作时,就设定哪个项目为工程。 将设计项目(如h_addergdf)设定为工程文件,有两个途径: 1、执行菜单File Project Set Project to Current File,即将当前设计文件设置成Project。选择此项后可以看到菜单上面的标题栏显示出所设文件的路径。(前一部分是目前编译器所指向的工程文件名称)。这点特别重要,此后的设计应该特别关注此路径的指向是否正确!如果已经指向待编译的文件,就不必再次设置为工程。 2、如果设计文件未打开,执行菜单File Project Name,然后在跳出的Project Name窗中找到文件夹及文件名,此时即选定此文件为本次设计的工程文件了。 步骤4:选择目标器件并编译 在对文件编译前必须选定最后实现本设计项目的目标器件,执行菜单AssignDevice,d出Device窗口。此窗口的Device Family是器件序列栏,应该首先在此拦中选定目标器件对应的序列名,如EPM7128S对应的是MAX7000S系列、EPF10K10对应的是FLEX10K、EP1K30对应的是ACEXlK系列等。为了选择EPF10K10LC84-4器件,应将此栏下方标有Show only Fastest Speed Grades的勾消去,以便显示出所有速度级别的器件。完成器件选择后,按OK键。 启动编译器。首先选择左上角菜单的MAX+plusII选项,在其下拉菜单中选择编译器项Compiler,此编译器的功能包括网表文件提取、设计文件排错、逻辑综合、逻辑分配、适配(结构综合)、时序仿真文件提取和编程下载文件装配等。如图5所示。 点击Start,开始编译!如果发现有错,一般情况下,会告诉用户错误的位置和情况,双击编译信息(Messages -Compiler)窗错误信息条,会直接跳到错误位置,排除错误后再次编译。 说明:错误位置是用元件左下部的浅色数字显示的,该数字是用户在Enter Symbol的时候自动顺序编号的。 图5 编译窗口 图5编译窗各功能项目块含义如下: • Compiler Netlist Extractor :编译器网表文件提取器,该功能块将输入的原理图文件或HDL文本文件转化成网表文件并检查其中可能的错误。该模块还负责连接顶层设计中的多层次设计文件;此外还包含一个内置的,用于接受外部标准网表文件的阅读器。 • Database Builder :基本编译文件建立器,该功能块将含有任何层次的设计网表文件转化成一个单一层次的网表文件,以便进行逻辑综合。 • Logic Synthesizer :逻辑综合器,对设计项目进行逻辑化简、逻辑优化和检查逻辑错误。综合后输出的网表文件表达了设计项目中底层逻辑元件最基本的连接方式和逻辑关系。逻辑综合器的工作方式和优化方案可以通过一些选项来实现。 • Partitioner :逻辑分割器,如果选定的目标器件逻辑资源过小,而设计项目较大,该分割器则自动将设计项目进行分割,使得它们能够实现在多个选定的器件中。 • Fitter :适配器,适配器也称结构综合器或布线布局器。它将逻辑综合所得的网表文件,即底层逻辑元件的基本连接关系,在选定的目标器件中具体实现。对于布线布局的策略和优化方式也可以通过设置一些选项来改变和实现。 • Timing SNF Extractor :时序仿真网表文件提取器,该功能块从适配器输出的文件中提取时序仿真网表文件,留待对设计项目进行仿真测试用。对于大的设计项目一般先进行功能仿真,方法是在Compiler窗口下选择Processing项中的Functional S
VHDL语言编写一个七段译码电路(共阳极)
LIBRARY IEEE ;
USE IEEESTD_LOGIC_1164ALL ;
ENTITY DecL7S IS
PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ;
LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ;
END ;
ARCHITECTURE one OF DecL7S IS
BEGIN
PROCESS( A )
BEGIN
CASE A(3 DOWNTO 0) IS
WHEN "0000" => LED7S <= "0111111" ; -- X“3F”0
WHEN "0001" => LED7S <= "0000110" ; -- X“06”1
WHEN "0010" => LED7S <= "1011011" ; -- X“5B”2
WHEN "0011" => LED7S <= "1001111" ; -- X“4F”3
WHEN "0100" => LED7S <= "1100110" ; -- X“66”4
WHEN "0101" => LED7S <= "1101101" ; -- X“6D”5
WHEN "0110" => LED7S <= "1111101" ; -- X“7D”6
WHEN "0111" => LED7S <= "0000111" ; -- X“07”7
WHEN "1000" => LED7S <= "1111111" ; -- X“7F”8
WHEN "1001" => LED7S <= "1101111" ; -- X“6F”9
WHEN "1010" => LED7S <= "1110111" ; -- X“77”10
WHEN "1011" => LED7S <= "1111100" ; -- X“7C”11
WHEN "1100" => LED7S <= "0111001" ; -- X“39”12
WHEN "1101" => LED7S <= "1011110" ; -- X“5E”13
WHEN "1110" => LED7S <= "1111001" ; -- X“79”14
WHEN "1111" => LED7S <= "1110001" ; -- X“71”15
WHEN OTHERS => NULL ;
END CASE ;
END PROCESS ;
END ;
实体,结构体,库,程序包,配置
1、实体:用于描述所设计系统的外部接口特性;即该设计实体对外的输入、输出端口数量和端口特性。
2、结构体:用于描述实体所代表的系统内部的结构和行为;它描述设计实体的结构、行为、元件及内部连接关系。
3、库:存放已经编译的实体、构造体、程序包集合和配置。
4、程序包:存放各设计模块可以共享的数据类型、常数、子程序库。
5、配置;实体对应多个结构体时,从与某个实体对应的多个结构体中选定一个作为具体实现。
LIBRARY ieee;
USE ieeestd_logic_1164all;
USE ieeestd_logic_arithall;
USE ieeestd_logic_unsignedall;
跟C类似,把这些库象头文件一样加到程序前面
1std_logic_1164 IEEE的标准库,仅定义了std_ulogic, std_ulogic_vector, std_logic, std_logic_vector等类型以及他们的逻辑 *** 作(and, or, xor, not, nand, nxor, nor)
2numeric_std IEEE的标准库,定义了unsigend/signed以及他们的算术运算(包括与integer),+,-,,/, rem, mod, abs ,to_integer/to_signed/to_unsigned也都在这个库里面定义。
3std_logic_arith 是synopsys的一个扩展,定义了unsigned, signed与integer, std_ulogic之间的算术运算、关系运算(>, <, >=, <=, =, /=)算术运算返回类型可以是signed, unsigned或std_logic_vector还定义了unsigned, signed, integer, std_logic_vector机种类型之间的转换函数CONV_STD_LOGIC_VECTOR, CONV_INTEGER, CONV_SIGNED, CONV_UNSIGNED
4std_logic_unsigned 是synopsys的一个扩展,定义了基于std_logic_vector与std_logic_vector、std_logic_vector与integer之间的算术运算, >, <, >=, <=, =, /=返回类型是std_logic_vector或boolean注意这里面的function的运算都是基于unsigned,就是说std_logic_vector和integer都变成unsigned之后再用std_logic_arith库中的function完成
std_logic_signed跟std_logic_unsigned类似,唯一的差别是,这里面的function都是先把 *** 作数(std_logic_vector或integer类型)都转换成signed之后再用std_logic_arith库中的function完成
在用这些库的时候,基本原则是要知道你想要EDA软件实现什么样的运算。大部分情况下,std_logic_vector应该作为unsigned参与运算。如果一定要std_logic_vector作为signed参与运算,最好用显示的to_integer来做。
Tips: 看到有人说, std_ulogic比std_logic好的地方在于,simulator能报告多个driver shorted together的bug。其他方面,std_ulogic与std_logic完全兼容。
以上就是关于vhdl语言中怎么处理在不同进程中的同一信号的赋值全部的内容,包括:vhdl语言中怎么处理在不同进程中的同一信号的赋值、请问写好一个VHDL程序后,怎么样一步步到仿真、请用VHDL语言帮我编写几个小程序,先谢谢了。需要编写的程序如下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)