2016-04-16 12 views
1

Я новичок в verilog. Я построил свой код, используя целые входы и выходы в vhdl. Теперь я хочу построить тот же код в verilog. Но я узнал, что входные порты в verilog не могут иметь целочисленный тип. Что можно сделать. Я бы предпочел ответ, который синтезируется.Целочисленные входные порты в verilog simillar для vhdl?

-код VHDL:

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

ли искали SO для Verilog и сумматор? Он полон примеров сумматора ... – Paebbels

+0

Проблема не в суммировании. Его тип ввода. Я код для ввода целочисленного ввода, который передается из другого модуля или блока, например, из блока ROM. @ Paebbels –

+0

Verilog не сильно заботится о типах. Если я правильно помню, что целые числа относятся только к константам и параметрам, а не к портам. – Paebbels

ответ

-1

Целые в Verilog и целые числа в VHDL не то же самое. В VHDL целое число представляет собой подписанное 2-состояние типа с не менее чем 32 битами. В Verilog целое число представляет собой 32-разрядную подписанную 4-разрядную переменную . Так, в Verilog,

integer a; 

и

reg signed [31:0] a; 

эквивалентны. В Verilog входные порты должны были быть чистыми типами, поэтому целочисленные входные порты не были разрешены. Однако выходным портам разрешалось быть переменными, поэтому выходной порт мог бы быть целым числом. Таким образом, вы можете заменить VHDL входных чисел с и выходные целые числа с integer и ваш код в Verilog является

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

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

endmodule 

или, возможно, для consistancy:

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

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

Так, целые позволялось в выходных портах, но не в входных портах.

+0

Когда я скомпилирую код, я получаю следующую ошибку: «Режим порта несовместим с объявлением:« @Matthew Taylor –

+0

Я никогда не слышал об IO как целое! –

+0

@Sai Rahul Мои пристрастия - я случайно включил переключатель SystemVerilog, поэтому мой код скомпилирован. Разумеется, отключение SystemVerilog вызвало ошибку, поскольку входные порты не могут быть переменными. Я соответствующим образом изменил свой ответ. Пожалуйста, дайте мне знать, как вы поживаете. –

0

Вы можете напрямую использовать integer с портом в Verilog.

Пожалуйста, обратите внимание, что использовать число, а не INT в Verilog. Потому что,

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