我正在寻找一些简单的想法来写一些我可以用来衡量力量的东西。我只需要它来确保我的功率测量正常。我在Virtex-6上使用Xilinx ISE 14.1。我想要一个简单的电路来写和合成。
到目前为止,我尝试了一个1K位的计数器,但这并不是很明显。我尝试了一个9K位的计数器,但ISE在合成它时遇到了问题(我让它运行了一个小时,然后终止了它)。现在,我正在尝试实现大的BRAMs,并使其永久启用。
我需要一种方法来限制大的向量进行优化,所以我想将所有的位进行xor运算,并将单个位的输出提供给LED。对于非常大的向量,有没有简单的方法来做到这一点?
发布于 2012-08-21 08:29:08
这是我想出来的。我觉得它为简单的代码和快速的编译时间提供了一个很好的折衷。它是一个移位器,每隔一位为高电平,因此每个FF应在每个时钟周期切换(在其设置之后)。如果需要,信号可以在开始时初始化,但根据时钟的不同,不应该超过一到两秒就能达到平衡。我使用led作为输出,以防止对电路进行优化。
architecture Behavioral of top is
signal shifter : std_logic_vector(<insert size> downto 0) := (others => '0');
begin
process(clk)
begin
if(clk'event and clk = '1')then
shift_bit <= not shift_bit;
shifter <= shift_bit & shifter(shifter'high downto 1);
end if;
end process;
led <= shifter(0);
end Behavioral;发布于 2012-08-17 18:16:23
在VHDL2008中,你可以像这样对一堆位进行异或运算:
signal wide : std_logic_vector(1000 downto 0);
signal narrow : std_logic;
narrow <= xor wide;不确定ISE是否支持此功能。
您可以使用如下函数:
function xor_vector(i:std_logic_vector) returns std_logic is
variable ret:std_logic:=i(i'low);
begin
for c in i'low+1 to i'high loop
ret := ret xor i(c);
end loop;
return ret;
end function;(未经测试,直接输入-可能需要调整语法!)
对于功耗,您可以尝试将交替的'1'和'0'模式馈送到移位寄存器而不是计数器-然后所有位都将在每个周期中更改。在移位寄存器上设置一个重置,以确保工具不会推断SRL16更有效。
https://stackoverflow.com/questions/11998775
复制相似问题