2014-10-17 2 views
-6
module adder6(
    output[5:0] sum, 
    output c_out, 
    input[5:0] a, b, 
    input c_in); 
wire [1:0] c_o; 
adder4 a(.sum([3:0]),c_o[0],.a(a[3:0]), .b(b[3:0),c_in); //4-bits adder 
full_adder fa1(sum[4],c_o[1],a[4],b[4],c_o[0]); //1-bit adder 
full_adder fa2(sum[5],c_out,a[5],b[5],c_o[1]); //1-bit adder 
endmodule 

module adder4(
    output[3:0] sum, 
    output c_out,  // carry out 
    input[3:0] a, b, // operands 
    input c_in);  // carry in 

wire [2:0] c_o; 
full_adder fa1(sum[0],c_o[0],a[0],b[0],c_in); 
full_adder fa2(sum[1],c_o[1],a[1],b[1],c_o[0]); 
full_adder fa3(sum[2],c_o[2],a[2],b[2],c_o[1]); 
full_adder fa4(sum[3],c_out,a[3],b[3],c_o[2]); 
endmodule 

module full_adder(
    output sum, 
    output c_out, // carry out 
    input a, 
    input b, 
    input c_in); // carry in 

wire sum1; 
wire c_in1; 
wire c_out2; 
    half_adder ha1(sum1,c_in1,a,b); 
    half_adder ha2(sum,c_out2,sum1,c_in); 
    or(c_out,c_out2,c_in1); 
endmodule 


module half_adder(
    output sum, 
    output c_out, // carry out 
    input a, 
    input b); 

assign sum=a^b; 
assign c_out=a&&b; 

endmodule 

Я должен сделать 6-битный сумматор из 4-битного сумматора и двух полных сумматоров. Я уверен, что проблема в том, что проблема в модуле adder6, так как я уже протестировал 4-разрядный сумматор отдельно, и он работает. Но я не могу найти ошибку. Я не уверен, если я сделал правильные соединения в adder4 функции, которые я использовал в adder6 модуля. (Обновление 1):6-битный полный сумматор возвращается с ошибкой

module adder6_test; 
// Inputs 
reg [5:0] a; 
reg [5:0] b; 

// Outputs 
wire [6:0] sum; 

// Instantiate the Unit Under Test (UUT) 
adder6 uut (
    .sum(sum), 
    .a(a), 
    .b(b) 
); 

initial begin 
    // Initialize Inputs 
    a = 0; 
    b = 0; 

    // Wait 100 ns for global reset to finish 
    #100; 

    // Add stimulus here 
    a = 50; 
    b = 14; 
    #10; 
    a = 2; 
    b = 33; 
    #10; 
    a = 63; 
    b = 63; 
end 

endmodule 

(обновление 2): Ошибка: ОШИБКА: HDLCompiler: 806 - "C: /Users/Iulia/Downloads/lab1_skel/ex4_skel/adder6.v" Строка 10 : Синтаксическая ошибка около ")".

// Verilog Test Fixture Template 

`timescale 1 ns/1 ps 

module TEST_gate; 
     reg <signal1>; 
     reg [2:0] <signal2>; 
     wire [3:0] <signal3>; 
     wire <signal4>; 

     <module_name> <instance_name> (
       <port1>, 
       <port2> 
    ); 

     integer <name1>; 
     integer <name2>; 

// The following code initializes the Global Set Reset (GSR) and Global Three-State (GTS) nets 
// Refer to the Synthesis and Simulation Design Guide for more information on this process 
reg GSR; 
assign glbl.GSR = GSR; 
reg GTS; 
assign glbl.GTS = GTS; 

initial begin 
    GSR = 1; 
    GTS = 0; // GTS is not activated by default 
    #100; // GSR is set for 100 ns 
    GSR = 0; 
end 

// Initialize Inputs 
    `define auto_init 

    `ifdef auto_init 

     initial begin 
     end 

    `endif 
endmodule 

Теперь я получаю эти ошибки: ОШИБКА: HDLCompiler: 806 - "C: /Users/Iulia/Downloads/lab1_skel/ex4_skel/adder6_test.v" Строка 6: Синтаксическая ошибка возле "<".

ОШИБКА: HDLCompiler: 806 - «C: /Users/Iulia/Downloads/lab1_skel/ex4_skel/adder6_test.v» Строка 7: Синтаксическая ошибка около «<».

ОШИБКА: HDLCompiler: 806 - "C: /Users/Iulia/Downloads/lab1_skel/ex4_skel/adder6_test.v" Строка 8: Синтаксическая ошибка около "<".

(Update 3) Я модифицировал модуль adder6 и мне удалось избавиться от ошибок. Я использовал 7-битную сумму, и я устранил перенос. Но теперь он не вычисляет сумму. При а = 63 и B = 63 сумма X. Это новый модуль adder6:

module adder6(
output[6:0] sum, 
input[5:0] a, 
input[5:0] b); 

wire c_out0; 
wire c_out1; 
adder4 add4(sum[3:0],c_out0,a[3:0],b[3:0],c_in); 
full_adder fa3(sum[4],c_out1,a[4],b[4],c_out0); 
full_adder fa4(sum[5],sum[6],a[5],b[5],c_out1); 
endmodule 
+0

Было бы полезно, если вы пишете, что именно ваша проблема (т.е. что вы имеете в виду под «возвращать ошибки»?). – Qiu

+0

@toolic, да, это мой код, все ошибки, которые я получаю, я уверен, что это из-за синтаксиса, который я использовал для adder4 ... Я не понимаю, почему я все еще получаю их. В случае, если вы забыли: D вы помогли мне вчера сделать 4-битный сумматор, я получил некоторые неправильные результаты, пока вы не заметили, что у меня было два выхода. –

+0

@IuliaDobra: вы ** не можете ** использовать '<' в качестве 1-го символа имени вашего сигнала. – Qiu

ответ

1

В вашей adder6 декларации есть эта строка:

adder4 a(.sum([3:0]),c_o[0],.a(a[3:0]), .b(b[3:0),c_in); //4-bits adder 

Как вы можете видеть, вы, называемый экземпляром adder4a. В то же время вы вызвали входной порт a. Вот почему вы пытаетесь скомпилировать свой код. Самое простое решение - переименовать экземпляр adder4.

Btw что конкретная строка должна выглядеть немного по-другому в случае работы:

adder4 add(.sum(sum[3:0]), .c_out(c_o[0]), .a(a[3:0]), .b(b[3:0]), .c_in(c_in)); 
Смежные вопросы