如果对于给定的过程,我声明一个变量(比如说一个1位变量,variable temp : std_logic;
),那么我可以给变量赋值如果给定条件返回true,即查询IC设计(非FPGA)的VHDL综合,特别是在变量赋值的情况下
if (xyz=1) then --Assuming that this condition returns TRUE
temp:= '1';
??这个逻辑是否可以合成为ASIC?
如果对于给定的过程,我声明一个变量(比如说一个1位变量,variable temp : std_logic;
),那么我可以给变量赋值如果给定条件返回true,即查询IC设计(非FPGA)的VHDL综合,特别是在变量赋值的情况下
if (xyz=1) then --Assuming that this condition returns TRUE
temp:= '1';
??这个逻辑是否可以合成为ASIC?
是的。变量对于FPGA和IC都是合成的。一个过程是一些模拟一点硬件的软件。这一点软件可以使用变量,但作为变量只在一个进程内的范围内,最终你必须驱动一个信号 - 硬件的一点点输出。
例如,下面是一些组合逻辑:
process (A, B, C, D)
variable TMP : std_logic;
begin
if A = '1' then
TMP := B and C;
TMP := TMP and D;
else
TMP := '0';
end if;
F <= TMP;
end process;
下面是使用一个变量,合成到组合逻辑上的触发器的d输入(因为它是在时钟的一个例子过程):
process (CLOCK)
variable TMP : std_logic;
begin
if rising_edge(CLOCK) then
TMP := A and B;
Q <= TMP;
end if;
end process;
这里是在时钟过程中使用的变量的一个例子,将合成到一个触发器(在其输入d AND门):
process (CLOCK)
variable TMP : std_logic;
begin
if rising_edge(CLOCK) then
Q <= TMP;
TMP := A and B;
end if;
end process;
两个同步进程之间的唯一区别是顺序。首先,变量在被访问之前被分配给;在第二个,它被分配给它之前被访问。
如果您在一个变量访问它之前分配给一个变量,则会推断组合逻辑;
如果在访问变量之前访问 变量,则会在推进过程中分配一个触发器 。
在组合过程中,在分配 之前不要访问变量:将会推断锁存器。
变量在进程执行期间保持其值。因此,如果一个变量在被分配给一个时钟进程之前被访问,则读取的值必须已写入该进程的先前执行中。在一个时钟控制的过程中,先前的执行将在前一个时钟沿:因此,推断出一个触发器。
所以,我不能真正地分配布尔值的变量?我需要分配信号并将其从IC上的输入引脚驱动吗? –
我不明白你的问题。 'boolean'是一个_type_。你可以有'boolean'信号或变量。两者都是可以合成的。但是最好使用_type_'std_logic'而不是'boolean',因为'boolean'类型不能表示未知/未初始化/不关心。我编辑过的问题试图让它更清晰。 –
我想我没有正确表达我的问题。我的意思是 - 如果我必须为上面问题中定义的变量'temp'指定一个值'0',我是否需要从IC上的引脚驱动该'0'值(映射作为输入端口),然后将其赋值给变量,或者说在任何进程中针对给定条件,如果条件为真,则将该值赋予变量'temp',即'temp <='0'; '所以我可以直接给任何变量赋一个常量值,并希望它能合成? –