FPGA 入门容易, 精通难! 难的原因在在于,FPGA 的语法是描述语言(描述电路的语言), 用语言描述的电路越接近电路本身的特性,则综合后电路则越可靠!越简单的原始语言产生电路越符合电路实际特性!
探讨下面几种表达方法产生的电路可靠性
1.if 语句的表达方式其一
&1 if rst='1' then
elsif clk'event and clk='1' then
sum<='1';
if (c='1') then
sum<=b;
end if;
end if;
上面这种表示方法意思: 在时钟上升沿,如果c='1', 则a 输出b ,否则a输出'1';
经过Quartus @ II 综合后的电路如下:
上图中,我们可以看到,定义了但没使用的输入脚SEL,D,A都被接到地了. 占用端口,但都内部强制到地.IF 条件语句综合成一个选择器,连接到D触发器的输入端, 上面的电路完整表达语法想要的意思.
对上面的语句进行修改如下,看看电路会发生改变吗?
&2 if rst='1' then
elsif clk'event and clk='1' then
if (c='1') then
sum<=b;
else
sum<='1';
end if;
end if;
综合后电路如下:
可以比较, 上面两个电路完全一样. 但是&1电路描述比较晦涩难懂,需要综合器正确理解设计者本来意图,才能生成正确的电路;&2电路结构简单,清晰明了!
所以推荐用第二种电路描述方式!
2. if 语句表达方式其二
&1 if rst='1' then
elsif clk'event and clk='1' then
if (c='1') then
sum<=b;
end if;
end if;
上面语句设计者本意是: c='1', 输入b 赋值给sum;
经过Quartus @ II 综合后的电路如下:
上面的电路综合后,把C条件作为D触发器ENA 使用, 电路结果简单,电路符合设计者意图!
如果我们上面语法修改一下,也符合设计者意图,但我们看看其电路能否有改变?
&2 if rst='1' then
elsif clk'event and clk='1' then
if (c='1') then
sum<=b;
else
sum<=sum;
end if;
end if;
需要说明的,sum 需要描述为buffer 输出类型
其综合后电路如下:
综合后电路结构并没有发生改变, 但是后者电路不描述不符合电路本身特性,D触发器电路输入不能接输出, 否则容易造成干扰,上面电路实际产生并没有这种情况,这只是由于综合器理解了设计者意图,才能综合成楼上电路的结果!
|