虽然我在写VHDL
方面有点精通,但我需要回答一个相对基本的问题:什么时候要分解VHDL
?
一个基本示例:假设我在ALU
中设计了一个8位VHDL
,我有VHDL
实现的几个选项。
简单地将整个ALU设计为一个实体。具有实体中所需的所有I / O(可以通过IEEE_STD_ARITHMETIC库完成)。
- 或 -
将ALU分解为后续的块,比如进位超前加法器和一些多路复用器。
- 或 -
将其进一步分解为构成进位前瞻的区块;一堆部分全加法器,一个进位路径和多路复用器,然后使用结构元素将它们连接在一起。
然后我们可以(如果我们想要的话)将所有内容分解为门级,为每个门级创建实体,行为和结构。
当然,我们需要进一步向下分析ALU
我们需要的VHDL
个文件。
这会影响合成后的物理实现吗?什么时候应该停止解决?
答案 0 :(得分:4)
你应该将你的VHDL保持在最高抽象级别,所以不要像你所描述的那样“分解”它。你提出的是你自己进行综合(比如创建一个进位前瞻加法器),这是一个坏主意。您不知道目标设备(FPGA或ASIC库)以及合成器的功能,您不应该尝试告诉它该做什么。如果您想要添加,请使用+
运算符,工具将找出最适合您设计约束的结构。
将设计划分为多个模块通常会使设计优化变得更加困难,因为模块之间的优化通常比模块内的优化更难。
当然,为了保持设计和可读性,在它们之间具有良好定义的接口的主要功能块应该在单独的模块中。 ALU可以是一个模块,指令ROM可以是另一个模块,依此类推。这些模块具有明确的,定义明确的功能,并且没有太多机会进行模块内优化。如果您想获得可用的最后一点优化,只需在优化之前展平设计并让工具完成工作。