我正在使用基于DDS方法(直接数字合成)的函数发生器项目在Basys 2中实现,但是当我运行Synthesize时,我得到了一个
ERROR ("ERROR:Xst:769 - "C:/Users/dell6410/Desktop/DDS VHDL/DDS_VHDL/triangularwave.vhd"
line 55: Operator <DIVIDE> must have constant operands or first operand must be power of 2")`
错误是由两个变量整数之间的划分引起的,这不允许我生成编程文件。有人知道解决方案吗?
n :in integer;
variable count:integer:=0;
op <= count*255 / n;
答案 0 :(得分:0)
从Xilinx支持document(第183页)复制,只能在以下情况下实现分频器,
除数是常数,是2的幂。
显然,您的n
不是常数。在这样的划分中,硬件难以在一个周期内有效地确定resule。
在通用分频器中,最好将除法实现为每个时钟实例减去数字的过程。
signal quotient: integer := 0;
signal remainder: integer := 0;
signal division_complete: std_logic := '0';
-- Begin architecture
process(clk, dividend, divisor, quotient, remainder)
variable n_quotient: integer := 0;
variable n_remainder: integer := 0;
variable n_division_complete: std_logic := '0';
begin
n_quotient := quotient;
n_remainder := remainder;
n_division_complete := '0';
if (dividend < divisor) then
-- End of division
n_division_complete := '1';
elif (division_complete = '1') then
-- Start of next division
n_division_complete := '1';
n_quotient := 0;
else
-- Division in progress
n_quotient := n_quotient + 1;
n_remainder := dividend - divisor;
end if;
if (clk'event and clk = '1') then
quotient <= n_quotient;
remainder <= n_remainder;
division_complete <= n_division_complete;
end if;
end process;
如果上述同步解决方案不可行,则需要将输入限制为上述Xilinx条件。如果你的除法是2的幂的简单除法,你可以使用>>
(右移)运算符。