2016-04-16 7 views
1

Ich bin ein Neuling zu Verilog. Ich habe meinen Code mit ganzzahligen Eingängen und Ausgaben in vhdl konstruiert. Jetzt möchte ich den gleichen Code in Verilog konstruieren. Aber ich habe erfahren, dass die Eingangsports im Verilog nicht vom Integer-Typ sein können. Was kann getan werden. Ich würde eine Antwort bevorzugen, die synthetisierbar ist.Integer-Eingangsports in Verilog Simillar zu VHDL?

VHDL-Code:

LIBRARY ieee; 
USE ieee.All; 
use IEEE.std_logic_1164.all; 
use IEEE.std_logic_unsigned.all; 

ENTITY adder_5 IS 
PORT (
a : IN integer ; 
b : IN integer; 
c : OUT integer 
); 

END adder_5; 
ARCHITECTURE add OF adder_5 IS 
BEGIN 
c<= (a rem 32) + (b rem 32); 
END add; 
+0

Haben SO für Verilog gesucht und Addierer? Es ist voll von Addierer-Beispielen .... – Paebbels

+0

Das Problem ist nicht über den Addierer. Es ist die Art der Eingabe. I der Code, um eine ganzzahlige Eingabe zu nehmen, die von einem anderen Modul oder Block weitergegeben wird, zum Beispiel von einem ROM-Block. @ Paebbels –

+0

Verilog kümmert sich nicht stark um Typen. Wenn ich mich richtig erinnere, sind ganze Zahlen nur für Konstanten und Parameter, nicht für Ports. – Paebbels

Antwort

-1

Ganze Zahlen in Verilog und ganzen Zahlen in VHDL sind nicht das Gleiche. In VHDL ist eine ganze Zahl ein vorzeichenbehafteter 2-stufiger Typ mit mindestens 32 Bits. In Verilog ist eine Ganzzahl eine 32-Bit-Variable mit dem Status mit dem Wert. Also, in Verilog,

integer a; 

und

reg signed [31:0] a; 

sind gleichwertig. In Verilog mussten Eingangsports Netztypen sein, so dass ganzzahlige Eingabeports nicht erlaubt waren. Ausgabeports dürfen jedoch Variablen sein, so dass ein Ausgabeport eine ganze Zahl sein kann. So können Sie VHDL Eingabe ganze Zahlen mit und Ausgang ganze Zahlen mit integer und Ihrem Code in Verilog ist

module adder (input wire signed [31:0] a, b, output integer c); 

    always @(*) 
    c = a%32 + b%32; 

endmodule 

oder vielleicht für consistancy ersetzen:

module adder (input wire signed [31:0] a, b, output reg signed [31:0] c); 

http://www.edaplayground.com/x/5PZe

So wurden ganze Zahlen erlaubt in Ausgangsports, aber nicht in Eingangsports.

+0

Wenn ich den Code kompiliere, erhalte ich den folgenden Fehler: "Port-Modus ist nicht kompatibel mit der Deklaration: a" @Matthew Taylor –

+0

Ich habe nie von IO als eine ganze Zahl gehört !! –

+0

@Sai Rahul Meine Appliances - Ich hatte versehentlich den Schalter SystemVerilog aktiviert, so dass mein Code einwandfrei kompiliert wurde. Das Deaktivieren von SystemVerilog führte natürlich zu einem Fehler, da die Eingabe-Ports keine Variablen sein können. Ich habe meine Antwort entsprechend geändert. Bitte lass mich wissen, wie es dir geht. –

0

Sie können integer mit Port in Verilog direkt verwenden.

Bitte beachten Sie, dass Integer und nicht int in Verilog verwenden. Denn

int is a 2 state type, having only 2 values 1 & 0. But integer is 4 state type, having 4 values - 0, 1, x, z.

module top (a); 
    input integer a; 
endmodule