hallo zusammen,
um die PWM-frequenz für ungefähr 9khz zu erzeugen, brauche ich takt für
300Mhz. single DCM-SP v9.1i, clkin : 50Mhz auf dem board wurden benutzt.
Bei DCM-wizard steht Fout von 5 bis 333Mhz, deswegen hab als frequzenout
= 300Mhz ausgewählt.
Es geht um symmetrisches PWM, also ein 14bit-counter zählt hoch bis max
3fff und runter bis 0, also dreiecksignal. Die Dreieck-Frequenz ergibt
sich dann: f = 300Mhz/2**15 ~ 9khz.
Sumulation geht, aber auf hw geht nicht.
1 | process(clk300Mhz)
|
2 | variable cnt : STD_LOGIC_VECTOR (13 downto 0) := (others => '0');-- [0 to x"3FFF"]
|
3 | variable cntDwn : STD_LOGIC := '0';
|
4 | if rising_edge(clk300Mhz) then
|
5 |
|
6 | -- Dreieck-counter
|
7 | if cntDwn = '0' then
|
8 | cnt := cnt + 1;
|
9 | if cnt = PWM_MAX then
|
10 | cntDwn := '1';
|
11 | end if;
|
12 | else
|
13 | cnt := cnt - 1;
|
14 | if cnt = x"0000" then
|
15 | cntDwn := '0';
|
16 | end if;
|
17 | end if;
|
18 | cntDown <= cntDwn;
|
19 | end if;
|
20 | end process;
|
21 |
|
22 | NET "cntDown" LOC = L20;
|
23 | NET "cntDown" IOSTANDARD = "LVCMOS33";
|
24 | NET "cntDown" DRIVE = 8;
|
25 | NET "cntDown" SLEW = SLOW;
|
den outport : "cntDown" hab ich auf ein IO-Pin zugewiesen und auf oszzi
schauen, es sollte ein Impuls für 300Mhz/2**15 Hz erscheinen. Aber
scheint ein konstante Signal, 3.3 V, also "high" !?
Nach paar stunden :( ausprobiert, hab gemerkt, es läuft nur bis maximal
fout = 260Mhz, mehr geht nicht.
wieso ist das, welche parameter muss ich vllt DCM einstellen?
vielen dank im voraus!