如何在Verilog中处理无用的输出?

时间:2014-02-01 03:29:55

标签: verilog

道歉标题并没有很好地解释这个问题,我将在下面详细解释。

我是verilog的新手,并且在我的第一次实验作业中遇到了困难。一个任务是制作一个4 * 4进位保存乘法器,它由两种类型的乘法器组成,这两种乘法器又由全加器和AND门组成,全加器由半加器组成。我使用最简单的半加法器一直到进位保存乘数。

两种乘数:http://i129.photobucket.com/albums/p205/Jack_Tianyu_Yang/Capture1_zpsf34b724c.png

进位保存乘数的手绘图 http://i129.photobucket.com/albums/p205/Jack_Tianyu_Yang/photo_zps905f2c13.jpg

进位保存乘数的代码在这里。我实例化了两种类型的乘法器,并使用大量内部线路进行连接。 (我承认这很天真,但这是我现在能做的最好的事情,我会继续练习并且做得更好。)我的问题是:参考“手绘”,最左边的模块在第一行,你可以看到有两个端口--- q0_out和q1_out,它们是这个乘法器模块的输出,但不是主输出列表中输出的一部分。实际上,q0_out,q1_out,q2_out,q3_out和m0_out,m1_out,m2_out,m3_out都不在输出列表中。它们实际上分别是q0到q3和m0到m3的相同值。 (这可以通过第一张图片验证) 当我合成下面粘贴的代码时,Xilinx ISE给了我一堆相同的警告,例如:“忽略了对q3_out的赋值,因为从不使用标识符”。 当我问TA时,他说我应该“将4 * 4进位保存乘数视为黑盒子,唯一的输入是m3m2m1m0,q3q2q1q0,唯一的输出是p7p6p5p4p3p2p1。像q3_out这样的输出是'内部',不应该出现在最终输出列表中“。我不知道如何应对这种情况。如您所见,我只是将q3指定给q3_out,因为q3_out是从q3一直传播的相同值。

请随时评论我的代码(改进什么,编码风格有什么不好),并请我详细说明问题,如果可能的话,请分享一些如何解决这个问题的想法。提前谢谢大家。

`timescale 1ns / 1ps
module multiplier44_OMG(
input m0,m1,m2,m3,q0,q1,q2,q3,
output p0,p1,p2,p3,p4,p5,p6,p7
);


 wire w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12,w13,w14,w15,w16,w17,w18,w19,w20;
 wire w21,w22,w23,w24,w25,w26,w27,w28,w29,w30,w31,w32,w33,w34,w35,w36,w37; //Internal wires

 wire cin0,cin1,cin2,mk1_mul2_3; //These inputs are feeding into the carry save multiplier and are all zeroes.
 wire q0_out,q1_out,q2_out,q3_out,m0_out,m1_out,m2_out,m3_out;

   assign cin0=1'b0;
assign cin1=1'b0;
assign cin2=1'b0;
assign mk1_mul2_3=1'b0;// Inputs are assigned to zero.

assign q0_out=q0;
assign q1_out=q1;
assign q2_out=q2;
assign q3_out=q3;
assign m0_out=m0;
assign m1_out=m1;
assign m2_out=m2;
assign m3_out=m3;//THIS IS THE PART I DON'T KNOW HOW TO DEAL WITH


and (p0,m0,q0);
multiplier2 mul2_0(m1,m0,q0,q1,cin0,w1,w2,w3,w4,p1);
multiplier2 mul2_1(m2,m1,w1,w2,w3,w5,w6,w7,w8,w9);
multiplier2 mul2_2(m3,m2,w5,w6,w7,w10,w11,w12,w13,w14);
multiplier2 mul2_3(mk1_mul2_3,m3,w10,w11,w12,q0_out,q1_out,w15,w16,w17);
multiplier mul_0(w9,w4,q2,cin1,w18,w19,w20,p2);
multiplier mul_1(w14,w8,w18,w19,w21,w22,w23,w24);
multiplier mul_2(w17,w13,w21,w22,w25,w26,w27,w28);
multiplier mul_3(w15,w16,w25,w26,q2_out,w29,w30,w31);
multiplier mul_4(w24,w20,q3,cin2,w32,w33,m0_out,p3);
multiplier mul_5(w28,w23,w32,w33,w34,w35,m1_out,p4);
multiplier mul_6(w31,w27,w34,w35,w36,w37,m2_out,p5);
multiplier mul_7(w29,w30,w36,w37,q3_out,p7,m3_out,p6);

 endmodule

星期五晚上在实验室里独自盯着代码感觉不太好。(加上它的春节。)我知道我的问题很简单,但即使我需要帮助,伟大的网友们也给予了大力帮助。

1 个答案:

答案 0 :(得分:0)

警告只是一个警告,这不是错误。如果您生成的信号没有负载,那么合成器会发出警告,但没有什么可以“修复”。

此外,由于q3_out是从mul_7输出的,因此您不应该使用单独的assign语句来驱动它。每根电线应该只有一个驱动器。