Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Jak połączyć moduły Verilog i VHDL w jednym projekcie?

Cześć,

mam taki problem: są 2 moduły ->

1-wszy dzielnik częstotliwości w Verilog ( clock 50 MHz -> ~ 1Hz)
2-gi licznik NKB binarny 8 bit w VHDL (wyjścia podłączone do LED na płytce uruchomieniowe)

Moje pytanie brzmi jak w projekcie "ISE Webpack" połączyć te dwa moduły tak aby wyjście pierwszego dzielnika(zegar 1 Hz) wchodziło na wejście drugiego licznika.

Pierwszy projekt dzielnika z %) MHZ to 1HZ mam wypróbowany na płytce "Elbert V2" - link:

https://docs.numato.com/doc/elbert-v2-spartan-3a-fpga-d...

W pierwszym projekcie są dwa pliki: moduł dzielnika w Verilog i plik ucf (user constraint file) z mapowaniem pinów. Oto te pliki:

slowClock.v


module slowClock(clk, reset, clk_1Hz);
input clk, reset;
output clk_1Hz;

reg clk_1Hz = 1'b0;
reg [27:0] counter;

always@(negedge reset or posedge clk)
begin
if (reset == 1'b0)
begin
clk_1Hz <= 0;
counter <= 0;
end
else
begin
counter <= counter + 1;
if ( counter == 25_000_000)
begin
counter <= 0;
clk_1Hz <= ~clk_1Hz;
end
end
end
endmodule



slowClock.ucf


NET "clk" LOC = P129;
NET "clk" PERIOD = 50MHz; //main clock

NET "reset" PULLUP;
NET "reset" LOC = "P75"; //switch button z Pullup +5V

NET "clk_1Hz" LOC = "P46"; //LED



Projekt na mojej płytce uruchom. działa poprawnie (pierwsza dioda miga z małą częstotliwościa). Przykład z sieci, tylko mała zmiana, aby "reset" był zboczem opadającym nie rosnącym.

Drugi projekt :

Licznik binarny 8 bit w VHDL


entity binary_counter_top is
Port ( CLK : in STD_LOGIC;
LED : out STD_LOGIC_VECTOR (7 downto 0));
end binary_counter_top;

architecture Behavioral of binary_counter_top is

signal CLK_DIV : std_logic_vector (2 downto 0);
signal COUNT : std_logic_vector (7 downto 0);

begin

-- clock divider
process (CLK)
begin
if (CLK'Event and CLK = '1') then
CLK_DIV <= CLK_DIV + '1';
end if;
end process;

-- counter
process (CLK_DIV(2))
begin
if (CLK_DIV(2)'Event and CLK_DIV(2) = '1') then
COUNT <= COUNT + '1';
end if;
end process;

-- display the count on the LEDs
LED <= not COUNT;

end Behavioral;


Nie wiem jak zorganizować projekt "ISE Webpack" (a właściwie darmowa licencja na "ISE Design Suite 14.7) aby skompilować oba moduły i wejście drugiego podłączyć do wyjścia pierwszego?

Za wszelkie podpowiedzi z góry dziękuję
PozdrawiamTen post został edytowany przez Autora dnia 30.07.17 o godzinie 12:52
Jakub Tyburski

Jakub Tyburski Asystent dydaktyczny
- Wojskowa Akademia
Techniczna w War...

Temat: Jak połączyć moduły Verilog i VHDL w jednym projekcie?

Odpowiedź na mailu :)
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Jak połączyć moduły Verilog i VHDL w jednym projekcie?

Jakub T.:
Odpowiedź na mailu :)

Dzięki pomocy Jakuba Tyburskiego - użycie komponentów i port map udało mi się poprawnie połączyć te dwa moduły. Oto projekt jaki przysłał Jakub - plik integruje w jednym entity dwa komponenty: dzielnik i licznik NKB

[b] Projekt.vhd[/b}


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity projekt is
Port ( clk_in, reset : in STD_LOGIC;
clk_1Hz : out STD_LOGIC;
LED_OUT : out STD_LOGIC_VECTOR (7 downto 0));
end projekt;

architecture Beh of projekt is

component slowClock is
port ( clk, reset : in STD_LOGIC;
clk_1Hz : out STD_LOGIC);
end component;

component binary_counter_top is
Port ( CLK : in STD_LOGIC;
LED : out STD_LOGIC_VECTOR (7 downto 0));
end component;

signal CLK_1_Hz_signal :std_logic;

begin

C1: slowclock port map (CLK_IN, RESET, CLK_1_Hz_signal);
C2: binary_counter_top port map (CLK_1_Hz_signal, LED_OUT);

end Beh;



A tu treść porady :

1. Stwórz nowy projekt,
2. Zdecyduj, który język wybierasz (znaczy w Wizardzie jak go tworzysz - czy wybierzesz VHDL czy Verilog to wsio ryba, zależy który język wolisz),
3. Dodaj do projektu pliki z dzielnikiem i licznikiem
4. Stwórz nowy trzeci plik w projekcie o kodzie, który załączyłem do maila (mogłem się gdzieś walnąć gdyż pisałem z głowy, więc spokojnie jeśli od razu nie zadziała). Plik ten stworzyłem przyjmując, że wybrałeś VHDL-a jako domyślny język dla projektu.

Jakub dziękuję.Ten post został edytowany przez Autora dnia 30.07.17 o godzinie 18:00
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Jak połączyć moduły Verilog i VHDL w jednym projekcie?

Na bazie projektu z dwoma komponentami wypróbowałem jeszcze jeden (wolny zegar + 8-bitowy rejestr przesuwny w VHDL). Oto pilki projektu (testowany na Elbert V2 - Spartan III)

Plik projektu:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity projekt is
Port ( clk_in, reset : in STD_LOGIC;
clk_1Hz : out STD_LOGIC;
D : in STD_LOGIC;
LED_OUT : out STD_LOGIC_VECTOR (7 downto 0));
end projekt;

architecture Beh of projekt is

component slowClock is
port ( clk, reset : in STD_LOGIC;
clk_1Hz : out STD_LOGIC);
end component;

component shift_register_top is
Port ( CLK : in STD_LOGIC;
D : in STD_LOGIC;
LED : out STD_LOGIC_VECTOR(7 downto 0));
end component;

signal CLK_1_Hz_signal :std_logic;

begin

C1: slowclock port map (CLK_IN, RESET, CLK_1_Hz_signal);
C2: shift_register_top port map (CLK_1_Hz_signal, D, LED_OUT);

end Beh;


Tutaj dzielnik zegara (V out - Herce) - Verilog:


module slowClock(clk, reset, clk_1Hz);
input clk, reset;
output clk_1Hz;

reg clk_1Hz = 1'b0;
reg [27:0] counter;

always@(negedge reset or posedge clk)
begin
if (reset == 1'b0)
begin
clk_1Hz <= 0;
counter <= 0;
end
else
begin
counter <= counter + 1;
if ( counter == 500_000)
begin
counter <= 0;
clk_1Hz <= ~clk_1Hz;
end
end
end
endmodule



A tutaj 8-mio bitowy rejestr przesuwny - VHDL:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity shift_register_top is
Port ( CLK : in STD_LOGIC;
D : in STD_LOGIC;
LED : out STD_LOGIC_VECTOR(7 downto 0));
end shift_register_top;

architecture Behavioral of shift_register_top is
signal clock_div : STD_LOGIC_VECTOR(4 downto 0);
signal shift_reg : STD_LOGIC_VECTOR(7 downto 0) := X"00";
begin

-- clock divider
process (CLK)
begin
if (CLK'event and CLK = '1') then
clock_div <= clock_div + '1';
end if;
end process;

-- shift register
process (clock_div(4))
begin
if (clock_div(4)'event and clock_div(4) = '1') then
shift_reg(7) <= D;
shift_reg(6) <= shift_reg(7);
shift_reg(5) <= shift_reg(6);
shift_reg(4) <= shift_reg(5);
shift_reg(3) <= shift_reg(4);
shift_reg(2) <= shift_reg(3);
shift_reg(1) <= shift_reg(2);
shift_reg(0) <= shift_reg(1);
end if;
end process;

-- hook up the shift register bits to the LEDs
LED <= shift_reg;

end Behavioral;


Wyjścia rejestru są podłączone do 8 diod LED na płytce "Elbert Spartan V2".

Tutaj plik "user constraints" mapowanie I/O (tylko dla tej płytki Elbert V2):


NET "clk_in" LOC = P129;
NET "clk_in" PERIOD = 10MHz; //main clock // MOZE BYC ALE NIE MUSI

NET "reset" PULLUP;
NET "reset" LOC = "P75"; //switch button z Pullup +5V //MOZE BYC ALE NIE MUSI, CHYBA ZE BEZ TEGO NIE DZIALA

NET "D" PULLUP;
NET "D" LOC = "P80";

// PINY ZGODNIE Z INSTRUKCJA DO PLYTKI (ODREBNY PIN DO KAZDEGO Z WYJSC)
NET "LED_OUT<0>" LOC = "P46"; //LED0
NET "LED_OUT<1>" LOC = "P47"; //LED1
NET "LED_OUT<2>" LOC = "P48"; //LED2
NET "LED_OUT<3>" LOC = "P49"; //LED3
NET "LED_OUT<4>" LOC = "P50"; //LED4
NET "LED_OUT<5>" LOC = "P51"; //LED5
NET "LED_OUT<6>" LOC = "P54"; //LED6
NET "LED_OUT<7>" LOC = "P55"; //LED7


Może komuś się przyda? Często z samego kursu on-line w sieci trudno jest początkującemu stworzyć działający projekt (w tym przypadku to środowisko Xilinx "ISE Webpack").

PozdrawiamTen post został edytowany przez Autora dnia 11.08.17 o godzinie 13:20



Wyślij zaproszenie do