VHDL初学者常犯的错误及解决过程
设计中从硬件到软件,不断有新的问题出现,先将出现的典型问题罗列如下。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1.Maxplus2功能问题:
Maxplus 2对用于数组描述的RAM及ROM在编译过程中会出错,有可能是Maxplus 2在语法支持上不太全面。该用Quarters II运行或用元件例化的方法解决。
例如:subtype word is std_logic_vector(k-1 downto 0);
type memory is array(0 to 2**w-1)of word;
解决:在Quartus П上运行通过。
2. 进行仿真实验时,结束时间设为100us时出现的问题:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
解决:不改动原状态的时间设置。
3.管脚编辑出现的问题:原因是自己改变了原来的管脚编号
4.毛刺信号的产生信号在FPGA 器件内部通过连线和逻辑单元时, 都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关。同时还受器件的制作工艺、工作电压、温度等条件的影响。信号的高低电平转换也许要一定的过渡时间。由于以上因素的影响,多路信号的电平变化时,在信号变化的瞬间,组合逻辑的输出状态不确定, 往往会出现一些不正确的尖峰信号。这些尖峰信号被称为“毛刺”。许多逻辑电路产生的小的寄生信号,也能成为毛刺信号。这些无法预见的毛刺信号可通过设计来传播并产生不需要的时钟脉冲。应该明确的是,任何组合电路都可能是潜在的毛刺信号发生器,而时钟端口、清零和置位端口对毛刺信号十分敏感,任何一点毛刺都可能会使系统出错。
5. 基本VHDL编程语法错误:
①丢失关键字、符号及端口设置。
②前后不能呼应,丢失结尾等,如if对应end if。
③实体与保存名不一致,调用名与实际名不一致,前后应用名不一致。
④从其它机器或U盘转换到另台机器时,由于版本不一致,致使字符及符号出错。
⑤要求的数据位数与程序中数据位数不一致而出错
⑥多个源冲突。
⑦设置端口、信号及变量数据类型出错。
⑧调用的文件必须与主文件在同一个文件包内。
⑨对一些运算及运行转换,必须加载库
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
use ieee.numeric_std.all;
6. architecture struc of multi16 is
begin
process
begin
if (clock'event and clock='1') then
result<=dataa*datab;
end if;
end process;
end struc;
解决:加敏感量。process(clock),敏感量起着开关作用。
7.设计芯片的选择。对复杂的运算,CPLD是运算不过来的,采用FPGA能运行。
8.延时问题:原因是实际下载器件的延时产生。
解决:化简表达式,可减少延时,但还是有延时。这涉及到门器件的指标,其间的延时是最小值保证的,故选器件时其延时要小于应用要求。
9.variable i:std_logic;
原因:非法使用了变量。
解决:删除掉。
10.有许多输出反馈作为信号的输入,故输出应是buffer(输出但可以反馈到实体内部)。
解决:将输出改为buffer类型。
11.出现的问题程序,及编译出现的结果:
architecture struc of multi16 is
begin
process
begin
if (clock'event and clock='1') then
result<=dataa*datab;
end if;
end process;
end struc;
解决:加敏感量。process(clock)。
12. 同步设计时,全局时钟输入一般都接在器件的时钟端, 否则会使其性能受到影响。对于需要多时钟的时序电路。 最好选用一个频率是它们的时钟频率公倍数的高频主时钟。其次各个功能模块要使用统一的复位电路。在使用带时钟的触发器、计数器等有复位端的库器件时,一般应尽量使用有同步复位的器件。注意复位时保证各个器件都能复位,以避免某些寄存器的初始状态不确定而引起系统工作不可靠。第三是尽量在一般的时序电路采用同步电路。尽可能使用同步计数器、并行进位加法器、同步移位寄存器等同步器件,避免使用异步触发器和异步RS触发器;尽量减少或不使用逻辑门控制时钟信号。也不要用系统主时钟参与逻辑运算来产生控制信号。因为它会在时钟和数据之间产生较多的扭曲;避免用触发器的输出作为另一触发器的时钟;译码器的输出不能直接接在器件的时钟端和复位端;不要将异步数据接在同一时钟触发的多个触发器上; 避免将异步数据接在同一时钟打入的寄存器上。在设计中电路的每一部工作时序都要留有足够的余量。
用户461316 2008-9-17 21:10