my_love 发表于 2011-5-26 21:36:38

帮我看看 程序 ROM做的正弦波发生器

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

entity zxb is
generic(counter:integer:=16777216);
port(clk,reset:in std_logic;                     --ROM
        q:out std_logic_vector(7 downto 0));
end zxb;

architecture a of zxb is
type vector_array is array(0 to 119) of std_logic_vector(7 downto 0);
signal count:integer range 0 to counter;
signal data:std_logic_vector(7 downto 0);
signal addr:integer range 0 to 119:=0;

Constant memory:vector_array:=
(conv_std_logic_vector(128,8),conv_std_logic_vector(134,8),conv_std_logic_vector(141,8),
conv_std_logic_vector(148,8),conv_std_logic_vector(154,8),conv_std_logic_vector(161,8),
conv_std_logic_vector(167,8),conv_std_logic_vector(173,8),conv_std_logic_vector(180,8),
conv_std_logic_vector(186,8),conv_std_logic_vector(191,8),conv_std_logic_vector(197,8),
conv_std_logic_vector(203,8),conv_std_logic_vector(208,8),conv_std_logic_vector(213,8),
conv_std_logic_vector(218,8),conv_std_logic_vector(223,8),conv_std_logic_vector(227,8),
conv_std_logic_vector(231,8),conv_std_logic_vector(235,8),conv_std_logic_vector(238,8),
conv_std_logic_vector(242,8),conv_std_logic_vector(244,8),conv_std_logic_vector(247,8),
conv_std_logic_vector(249,8),conv_std_logic_vector(251,8),conv_std_logic_vector(253,8),
conv_std_logic_vector(254,8),conv_std_logic_vector(255,8),conv_std_logic_vector(255,8),
conv_std_logic_vector(255,8),conv_std_logic_vector(255,8),conv_std_logic_vector(255,8),
conv_std_logic_vector(254,8),conv_std_logic_vector(253,8),conv_std_logic_vector(251,8),
conv_std_logic_vector(249,8),conv_std_logic_vector(247,8),conv_std_logic_vector(244,8),
conv_std_logic_vector(242,8),conv_std_logic_vector(238,8),conv_std_logic_vector(235,8),
conv_std_logic_vector(231,8),conv_std_logic_vector(227,8),conv_std_logic_vector(223,8),
conv_std_logic_vector(218,8),conv_std_logic_vector(213,8),conv_std_logic_vector(208,8),
conv_std_logic_vector(203,8),conv_std_logic_vector(197,8),conv_std_logic_vector(192,8),
conv_std_logic_vector(186,8),conv_std_logic_vector(180,8),conv_std_logic_vector(173,8),
conv_std_logic_vector(167,8),conv_std_logic_vector(161,8),conv_std_logic_vector(154,8),
conv_std_logic_vector(148,8),conv_std_logic_vector(141,8),conv_std_logic_vector(134,8),
conv_std_logic_vector(128,8),conv_std_logic_vector(121,8),conv_std_logic_vector(114,8),
conv_std_logic_vector(107,8),conv_std_logic_vector(101,8),conv_std_logic_vector(94,8),
conv_std_logic_vector(88,8),conv_std_logic_vector(82,8),conv_std_logic_vector(75,8),
conv_std_logic_vector(69,8),conv_std_logic_vector(64,8),conv_std_logic_vector(58,8),
conv_std_logic_vector(52,8),conv_std_logic_vector(47,8),conv_std_logic_vector(42,8),
conv_std_logic_vector(37,8),conv_std_logic_vector(32,8),conv_std_logic_vector(28,8),
conv_std_logic_vector(24,8),conv_std_logic_vector(20,8),conv_std_logic_vector(17,8),
conv_std_logic_vector(13,8),conv_std_logic_vector(11,8),conv_std_logic_vector(8,8),
conv_std_logic_vector(6,8),conv_std_logic_vector(4,8),conv_std_logic_vector(2,8),
conv_std_logic_vector(1,8),conv_std_logic_vector(0,8),conv_std_logic_vector(0,8),
conv_std_logic_vector(0,8),conv_std_logic_vector(0,8),conv_std_logic_vector(0,8),
conv_std_logic_vector(1,8),conv_std_logic_vector(2,8),conv_std_logic_vector(4,8),
conv_std_logic_vector(6,8),conv_std_logic_vector(8,8),conv_std_logic_vector(11,8),
conv_std_logic_vector(13,8),conv_std_logic_vector(17,8),conv_std_logic_vector(20,8),
conv_std_logic_vector(24,8),conv_std_logic_vector(28,8),conv_std_logic_vector(32,8),
conv_std_logic_vector(37,8),conv_std_logic_vector(42,8),conv_std_logic_vector(47,8),
conv_std_logic_vector(52,8),conv_std_logic_vector(58,8),conv_std_logic_vector(63,8),
conv_std_logic_vector(69,8),conv_std_logic_vector(75,8),conv_std_logic_vector(82,8),
conv_std_logic_vector(88,8),conv_std_logic_vector(94,8),conv_std_logic_vector(101,8),
conv_std_logic_vector(107,8),conv_std_logic_vector(114,8),conv_std_logic_vector(121,8)
);
begin
data<=memory(addr);          在这边出的问题
process(clk,reset)
begin
if reset='0' then
        data<="00000000";
elsif (clk'event and clk='1') then
        count<=count+1;
        if(count=counter) then
                addr<=addr+1;
        end if;
end if;
q<=data;
end process;
end a;


Error (10028): Can't resolve multiple constant drivers for net "data" at zxb.vhd(60)
Error (10029): Constant driver at zxb.vhd(61)
Error (10028): Can't resolve multiple constant drivers for net "data" at zxb.vhd(60)

my_love 发表于 2011-5-26 21:37:12

程序有点多帮忙看看

my_love 发表于 2011-5-26 22:16:28

木有人 做过这样类似的吗?

qwic 发表于 2011-5-26 22:23:26

data<=memory(addr);和data<="00000000";有冲突,这两行程序是并行,data重复赋值了。

data<=memory(addr)改在elsif (clk'event and clk='1')下面

my_love 发表于 2011-5-26 22:35:16

原来是这样啊    谢谢楼上   编译通过了

arm开发 发表于 2012-12-20 17:47:31

页: [1]
查看完整版本: 帮我看看 程序 ROM做的正弦波发生器