我正在学习VHDL,我正在尝试学习示例,语法指南和实验。
有一点我不太明白为什么你想要提供多个架构。例如,这个example MUX code:
architecture behv1 of Mux is
begin
process(I3,I2,I1,I0,S)
begin
-- use case statement
case S is
when "00" => O <= I0;
when "01" => O <= I1;
when "10" => O <= I2;
when "11" => O <= I3;
when others => O <= "ZZZ";
end case;
end process;
end behv1;
architecture behv2 of Mux is
begin
-- use when.. else statement
O <= I0 when S="00" else
I1 when S="01" else
I2 when S="10" else
I3 when S="11" else
"ZZZ";
end behv2;
是否有目的,或者只是为了清酒?
另外,不确定这是属于这里还是Electronics.SE,所以我想先在这里试试。
答案 0 :(得分:7)
虽然这个特定的例子似乎仅仅是为了一个例子,但是有几个原因可以解释为什么你需要为某些设计采用不同的架构。
当您尝试模拟整个SoC设计的另一个(不相关的)部分时,出于性能原因,通常要做的一件事就是提供IP设计的黑盒模型。
或者,您可能拥有更高级别的IP模型,允许更快的模拟时间,以及用于合成的模型。更高级别的模型通常用于处理器内核,因为在验证设计的其余部分时通常不需要模拟整个内核。
另一个可能的原因是在IP设计中有选择地具有不同的行为,以便在将IP集成到SoC设计中时可以实例化稍微不同的版本。例如,一个架构可能用于一个时钟域操作,而另一个架构可能在两个不同的时钟域之间具有同步。
答案 1 :(得分:2)
作为一个真实的例子,我有一个通用的仲裁模块,它实现了多种架构。我可以使用所需数量的输入实例化仲裁器,并为手头的任务选择合适的后端逻辑。在某些情况下,我使用一种简单的循环结构,每个时钟查看一个信号(慢,但门数很少)。其他时候,我需要更复杂的功能,例如按优先级加权或更高的速度(即:每个时钟查看4或8个信号)。这些需要比简单的循环设计更多的逻辑,但在某些情况下可能需要。
通过在同一模块中将每个不同的实现作为单独的体系结构,可以轻松地为任务选择适当的实现,或者根据需要在它们之间切换。
答案 2 :(得分:2)
设计师可以以不同的方式使用架构。
对我来说:
我回避使用体系结构来实现需要相同I / O的不同功能。也就是说,当使用实体时,无论我选择哪种架构,我都希望实体能够以相同的方式运行(我说功能上是因为如果一个架构模拟放置在芯片上,可能存在时序差异)。架构选择更多地基于您选择的“目标”(模拟,合成等)。