FPGA之道(26)VHDL初始化

举报
李锐博恩 发表于 2021/07/15 01:12:50 2021/07/15
【摘要】 文章目录 VHDL初始化未初始化的信号会对芯片的行为有什么影响初始化与仿真如何初始化 VHDL初始化 未初始化的信号会对芯片的行为有什么影响 信号最终都会对应到存储单元或者连线上,对于组合逻辑的信号,在FPGA上的归属应该是连线,而对于时序逻辑的信号,在FPGA上的归属上应该是寄存器、查找表、块存储等存储单元。 对于连线类的信号,是否初始化对...

VHDL初始化

未初始化的信号会对芯片的行为有什么影响

信号最终都会对应到存储单元或者连线上,对于组合逻辑的信号,在FPGA上的归属应该是连线,而对于时序逻辑的信号,在FPGA上的归属上应该是寄存器、查找表、块存储等存储单元。
对于连线类的信号,是否初始化对于芯片的行为几乎没有影响,因为芯片一上电后,整个FPGA的输入就由客观环境确定了,那么的连线被高电平驱动源驱动就是高电平,被低电平驱动源驱动就呈现低电平。而不会因为你给信号赋了初值而影响这个结果,否则这也就不是一个组合逻辑了。
对于类似寄存器类的存储单元信号,如果不赋初值的话,不同FPGA芯片型号的默认的上电状态会不同。有的是上电自动存储高电平,有的是自动存储低电平。由于时序逻辑的运算结果很多时候是和当前存储单元中存储的数值有关的,所以这类信号如果未赋初值,很可能造成设计在不同的芯片上运行结果的不同,这是比较危险的。
当然了,也许有的编译器或者芯片型号不支持赋初值的操作,那么这个时候一定要注意复位逻辑的编写。

初始化与仿真

初始化与仿真是息息相关的,无论是连线类还是存储类的信号,若没有初始化,在仿真的一开始都会出现不可确定的波形,如果是std_logic类型的话,就会显示’U’。
对于连线类信号,只要在后续给定输入,那么输出端的连线还是能够回归正常结果的。
但是对于存储类的信号,例如寄存器,如果这个寄存器存在反馈,例如:

signal a : std_logic;
process(clk)
begin
	if(clk'event and clk = '1')then
		a <= not a;
	end if;
end process;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
那么对于a信号,仿真器将永远不可能给出确定的仿真结果。

  
 
  • 1

如何初始化

初始化一般是在定义时,配合“:=”赋值符号进行的,例如:

	signal a : std_logic := '1'; 
	variable b : integer := 512;
	port(…
c : in std_logic_vector(3 downto 0) := "1010";);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

对于数组类型的信号,参考如下方法:

type rt is array (1 downto 0) of std_logic_vector (7 downto 0);
signal r0: rt := (X"11", X"88");

  
 
  • 1
  • 2

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/104272422

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。