Hallo zusammen,
ich habe vorher nur FPGAs verwendet, und hier den CLK bei einem echten
CLK Eingang für ein echtes synchrones Design mit nur einem CLK. Als FPGA
wurde hier ein CycloneIV verwendet.
Nun habe ich eine Frage zu einem MAX V, CPLD.
Darf man hier ein normales Signal als CLK verwenden, Beispiel:
1 | always @(negedge nRead)
|
2 | begin
|
3 | case(Addr)
|
4 | .
|
5 | .
|
6 | .
|
7 | endcase
|
8 | end
|
Normalerweise benutz ich VHDL, und im FPGA würde ich erst mal das nRead
Signal einsynchronisieren, auf eine fallende Flanke prüfen und das mit
dem allgemeinen CLK bearbeiten:
1 | signal rd_sr : std_logic_vector(2 downto 0);
|
2 | signal host_read : std_logic;
|
3 |
|
4 |
|
5 | process(clk_i, rst_i)
|
6 | begin
|
7 | if (rst_i = '1') then
|
8 | rd_sr <= (others => '0');
|
9 |
|
10 | elsif rising_edge(clk_i) then
|
11 | rd_sr <= rd_sr(1 downto 0) & NOT rdn_i;
|
12 | end if;
|
13 | end process;
|
14 |
|
15 |
|
16 | process(clk_i, rst_i)
|
17 | begin
|
18 | if (rst_i = '1') then
|
19 | host_read <= '0';
|
20 |
|
21 | elsif rising_edge(clk_i) then
|
22 |
|
23 | -- Default
|
24 | host_read <= '0';
|
25 |
|
26 | if ((host_rd_sr(2) = '0') AND (host_rd_sr(1) = '1')) then
|
27 | host_read <= '1';
|
28 | end if;
|
29 |
|
30 | end if;
|
31 | end process;
|
host_read ist jetzt nur noch für einen Takt aktive, und synchrone mit
clk_i.
Braucht man das bei einem CPLD nicht mehr machen?
Viele Grüße,
Michael