Block RAM zu langsam?

OP (Firma: Student) #3247075
Lesenswert?

Hallo zusammen,

vielleicht könnt ihr mir bei meiner Verwirrung helfen. Ich haben einen 
LCD Interface auf einem Spartan 6 aufgesetzt, das super funktioniert. 
Ich wollte nun Graustufenwerte in einem Block RAM ablegen und dann 
synchron mit meinem Pixeltakt die Werte auslesen und anzeigen. 
Merkwürdigerweise wird jedoch nicht zu jedem Takt ausgeselen obwohl sich 
die Addresse für das RAM im Takt ändert. Ich habe euch mal meine 
Simulation als Bild angehängt. Hier ist das Signal clk_in der Takt der 
ins RAM geht, address ist die RAM-Addresse, dataout sind die Grauwerte 
die ich aus dem RAM lese, das Signal test habe ich zum debugin genommen 
es wechselt immer dann den Pegel wenn Daten aus dem RAM gelesen werden.

Anbei noch meine Code:
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.std_logic_arith.all;
4
 
5
use IEEE.STD_LOGIC_UNSIGNED.ALL; 
6

7
library unisim;
8
use unisim.vcomponents.all;
9

10
entity sineWaveGen is
11
port ( address  :  in integer;
12
    clk_in   :  in  std_logic;
13
    we      :  in std_logic;
14
      dataout   :   out std_logic_vector (7 downto 0);
15
    datain   :   in integer
16
      );
17
end sineWaveGen;
18

19
architecture Behavioral of sineWaveGen is
20
type ram_t is array (0 to 1279) of integer range 0 to 255;
21

22
signal test : std_logic := '1';
23

24
--ROM for storing the sine values generated by MATLAB.
25
signal ram : ram_t :=(128, 129, 129, 130, 131, 131, 132, 132,
26
 133, 134, 134, 135, 136, 136, 137, 137, 138, 139, 139, 140, 141, 141,
27
 142, 142, 143, 144, 144, 145, 146, 146, 147, 147, 148, 149, 149, 150,
28
 151, 151, 152, 152, 153, 154, 154, 155, 155, 156, 157, 157, 158, 158,
29
 159, 160, 160, 161, 162, 162, 163, 163, 164, 165, 165, 166, 166, 167,
30
 168, 168, 169, 169, 170, 171, 171, 172, 172, 173, 173, 174, 175, 175,
31
 176, 176, 177, 178, 178, 179, 179, 180, 180, 181, 182, 182, 183, 183,
32
 184, 184, 185, 186, 186, 187, 187, 188, 188, 189, 189, 190, 191, 191,
33
 192, 192, 193, 193, 194, 194, 195, 195, 196, 196, 197, 198, 198, 199,
34
 199, 200, 200, 201, 201, 202, 202, 203, 203, 204, 204, 205, 205, 206,
35
 206, 207, 207, 208, 208, 209, 209, 210, 210, 211, 211, 212, 212, 213,
36
 213, 213, 214, 214, 215, 215, 216, 216, 217, 217, 218, 218, 219, 219,
37
 219, 220, 220, 221, 221, 222, 222, 222, 223, 223, 224, 224, 225, 225,
38
 225, 226, 226, 227, 227, 227, 228, 228, 229, 229, 229, 230, 230, 230,
39
 231, 231, 232, 232, 232, 233, 233, 233, 234, 234, 234, 235, 235, 235,
40
 236, 236, 236, 237, 237, 237, 238, 238, 238, 239, 239, 239, 240, 240,
41
 240, 241, 241, 241, 241, 242, 242, 242, 243, 243, 243, 243, 244, 244,
42
 244, 245, 245, 245, 245, 246, 246, 246, 246, 246, 247, 247, 247, 247,
43
 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 250,
44
 250, 251, 251, 251, 251, 251, 252, 252, 252, 252, 252, 252, 252, 253,
45
 253, 253, 253, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 254,
46
 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
47
 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
48
 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
49
 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
50
 255, 255, 255, 255, 255, 255, 255, 255, 254, 254, 254, 254, 254, 254,
51
 254, 254, 254, 253, 253, 253, 253, 253, 253, 253, 252, 252, 252, 252,
52
 252, 252, 252, 251, 251, 251, 251, 251, 250, 250, 250, 250, 250, 250,
53
 249, 249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 247, 246,
54
 246, 246, 246, 246, 245, 245, 245, 245, 244, 244, 244, 243, 243, 243,
55
 243, 242, 242, 242, 241, 241, 241, 241, 240, 240, 240, 239, 239, 239,
56
 238, 238, 238, 237, 237, 237, 236, 236, 236, 235, 235, 235, 234, 234,
57
 234, 233, 233, 233, 232, 232, 232, 231, 231, 230, 230, 230, 229, 229,
58
 229, 228, 228, 227, 227, 227, 226, 226, 225, 225, 225, 224, 224, 223,
59
 223, 222, 222, 222, 221, 221, 220, 220, 219, 219, 219, 218, 218, 217,
60
 217, 216, 216, 215, 215, 214, 214, 213, 213, 213, 212, 212, 211, 211,
61
 210, 210, 209, 209, 208, 208, 207, 207, 206, 206, 205, 205, 204, 204,
62
 203, 203, 202, 202, 201, 201, 200, 200, 199, 199, 198, 198, 197, 196,
63
 196, 195, 195, 194, 194, 193, 193, 192, 192, 191, 191, 190, 189, 189,
64
 188, 188, 187, 187, 186, 186, 185, 184, 184, 183, 183, 182, 182, 181,
65
 180, 180, 179, 179, 178, 178, 177, 176, 176, 175, 175, 174, 173, 173,
66
 172, 172, 171, 171, 170, 169, 169, 168, 168, 167, 166, 166, 165, 165,
67
 164, 163, 163, 162, 162, 161, 160, 160, 159, 158, 158, 157, 157, 156,
68
 155, 155, 154, 154, 153, 152, 152, 151, 151, 150, 149, 149, 148, 147,
69
 147, 146, 146, 145, 144, 144, 143, 142, 142, 141, 141, 140, 139, 139,
70
 138, 137, 137, 136, 136, 135, 134, 134, 133, 132, 132, 131, 131, 130,
71
 129, 129, 128, 127, 127, 126, 125, 125, 124, 124, 123, 122, 122, 121,
72
 120, 120, 119, 119, 118, 117, 117, 116, 115, 115, 114, 114, 113, 112,
73
 112, 111, 110, 110, 109, 109, 108, 107, 107, 106, 105, 105, 104, 104,
74
 103, 102, 102, 101, 101, 100, 99, 99, 98, 98, 97, 96, 96, 95, 94, 94,
75
 93, 93, 92, 91, 91, 90, 90, 89, 88, 88, 87, 87, 86, 85, 85, 84, 84, 83,
76
 83, 82, 81, 81, 80, 80, 79, 78, 78, 77, 77, 76, 76, 75, 74, 74, 73, 73,
77
 72, 72, 71, 70, 70, 69, 69, 68, 68, 67, 67, 66, 65, 65, 64, 64, 63, 63,
78
 62, 62, 61, 61, 60, 60, 59, 58, 58, 57, 57, 56, 56, 55, 55, 54, 54, 53,
79
 53, 52, 52, 51, 51, 50, 50, 49, 49, 48, 48, 47, 47, 46, 46, 45, 45, 44,
80
 44, 43, 43, 43, 42, 42, 41, 41, 40, 40, 39, 39, 38, 38, 37, 37, 37, 36,
81
 36, 35, 35, 34, 34, 34, 33, 33, 32, 32, 31, 31, 31, 30, 30, 29, 29, 29,
82
 28, 28, 27, 27, 27, 26, 26, 26, 25, 25, 24, 24, 24, 23, 23, 23, 22, 22,
83
 22, 21, 21, 21, 20, 20, 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, 16, 16,
84
 16, 15, 15, 15, 15, 14, 14, 14, 13, 13, 13, 13, 12, 12, 12, 11, 11, 11,
85
 11, 10, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6,
86
 6, 6, 6, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 2, 2,
87
 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
88
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
89
 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
90
 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5,
91
 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10,
92
 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15, 15,
93
 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21,
94
 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28,
95
 29, 29, 29, 30, 30, 31, 31, 31, 32, 32, 33, 33, 34, 34, 34, 35, 35, 36, 36,
96
 37, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 43, 44, 44, 45,
97
 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54,
98
 55, 55, 56, 56, 57, 57, 58, 58, 59, 60, 60, 61, 61, 62, 62, 63, 63, 64, 64,
99
 65, 65, 66, 67, 67, 68, 68, 69, 69, 70, 70, 71, 72, 72, 73, 73, 74, 74, 75,
100
 76, 76, 77, 77, 78, 78, 79, 80, 80, 81, 81, 82, 83, 83, 84, 84, 85, 85, 86,
101
 87, 87, 88, 88, 89, 90, 90, 91, 91, 92, 93, 93, 94, 94, 95, 96, 96, 97, 98,
102
 98, 99, 99, 100, 101, 101, 102, 102, 103, 104, 104, 105, 105, 106, 107, 107,
103
 108, 109, 109, 110, 110, 111, 112, 112, 113, 114, 114, 115, 115, 116, 117, 117,
104
 118, 119, 119, 120, 120, 121, 122, 122, 123, 124, 124, 125, 125, 126, 127, 127);
105

106
attribute ram_style: string;
107
attribute ram_style of ram : signal is "block";
108

109
begin
110
  PROCESS(clk_in)
111
  BEGIN
112
    if(rising_edge(clk_in)) then
113
        if(we='1') then
114
            ram(address) <= datain;
115
        end if;
116
        dataout <= conv_std_logic_vector(ram(address),8);
117
      test <= not test;
118
    end if;
119
END PROCESS;
120

121
end Behavioral;

we wird stest auf LOW gehalten. Wäre toll wenn jemand von euch eine Idee 
hätte, habe gerade einen Balken vrom Kopf....
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #3247101
Lesenswert?

Jürgen Dürrwang schrieb:
> Merkwürdigerweise wird jedoch nicht zu jedem Takt ausgeselen obwohl
> sich die Addresse für das RAM im Takt ändert.
Oh doch. Nur ändert sich der ausgelese Wert nicht. Sieh mal deine 
Tabelle an, da stehen viele gleiche Zahlen hintereinander:
> 246, 246, 246, 246, 245, 245, 245, 245, 244, 244, 244, 243, 243, 243,
> 243, 242, 242, 242, 241, 241, 241, 241, 240, 240, 240, 239, 239, 239,
Z.B. 3x 244, 4x 243,  3x 242, 4x 241 usw...
OP (Firma: Student) #3247581
Lesenswert?

BRAM-Benutzer schrieb:
> So nebenbei: Dass Du einen Versatz bezüglich Schreiben und We hast, ist
> dir bewusst, ja?

Du meinst das ich ein Versatz hätte wenn ich eine "Zelle" im RAM 
beschreiben möchte oder?

Also im Moment generiere ich mir die Daten mit MATLAB und lege diese 
fest in den RAM. Vorab möchte ich da noch nichts schreiben. Wenn alles 
mal tut dann werde ich mich wohl auch ans beschreiben machen.
OP (Firma: Student) #3247583
Lesenswert?

Thomas Reinemann schrieb:
> Jürgen Dürrwang schrieb:
>> --ROM for storing the sine values generated by MATLAB.
>> signal ram : ram_t :=(128, 129, 129, 130, 131, 131, 132, 132,
>
> Ein Sinus ändert seinen Wert nun mal nicht immer mit jedem Schritt bei
> der kleinen Auflösung.
>
> Tom

Ja das hätte ins Auge fallen müssen, kommt davon wenn man den ganzen Tag 
vorm Bildschirm sitzt und irgendwelche Timing-Diagramme im 
Simulationstool anschaut. Da war ich auf ner ganz falschen Fährte....

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren