#module #verilog #delay #instantiation
#модуль #verilog #задержка #создание экземпляра
Вопрос:
Я разрабатываю модуль(бабочка), который имеет сумматор, вычитатель и множитель(по экземпляру). каждый модуль выдает правильный вывод после некоторого тактового цикла. но когда я запускаю модуль, он выдает вывод первого цикла для каждого модуля. как преодолеть эти проблемы
module butterfly_17(in1,in2,twiddle,clk,rst,load,out1,out2); input [69:0]in1,in2; input [16:0]twiddle; input clk,rst,load; output [69:0] out2; output [69:0] out1; wire [69:0]sub_out; cbnsadder c_17(in1,in2,clk,rst,out1);//adder module //output is producing after 10 clock cycles cbnssubtractor s_17(in2,in1,clk,rst,out2);//sub_out);//subtractor//output is producing after 12 clock cycles cbnsmultiplier #(.shiftingbits(17)) m_17(.a(sub_out),.b(twiddle),.clk(clk),.rst(rst),.load(load),.prod(out2));//multiplier module endmodule
Комментарии:
1. Вы имеете в виду, что модули выдают неверные выходные данные в течение нескольких циклов после изменения входных данных, прежде чем, наконец, выдадут правильный результат? Если это проблема для вас, вы можете реализовать некоторую логику, которая определяет, когда изменились входные данные, и если это так, запускает счетчик, который считает до 10, прежде чем разрешить вывод из cbnsadder.
2. Я думаю, вы имеете в виду, что все ваши подмодули генерируют выходные данные с разными тактами? Если это так, то либо задержите ввод, либо вывод вашего самого быстрого модуля, чтобы он соответствовал вашему самому медленному модулю.
3. похоже, что и вычитатель, и множитель выводят один и тот же вывод2. там вы получите «x».