verilog初心者です 符号拡張について教えください
また似たような質問で申しわけないです。(T T;)
入力16ビット、出力を32ビット(←乗算器にもつなぐ入力の為)全加算器verilog記述についての質問です
****************************************************************//fulladder_16.v
`timescale 1ns/10ps
module fulladder_16(a,b,q);
input [15:0] a,b;
output [32:0] q;
wire [15:0] cin;
//module fulladd.v instance
fulladd add0(.a(a[0]),.b(b[0]),.cin(1'b0),.q(q[0]),.cout(cin[0]));
fulladd add1(.a(a[1]),.b(b[1]),.cin(cin[0]),.q(q[1]),.cout(cin[1]));
fulladd add2(.a(a[2]),.b(b[2]),.cin(cin[1]),.q(q[2]),.cout(cin[2]));
:
:
fulladd add14(.a(a[14]),.b(b[14]),.cin(cin[13]),.q(q[14]),.cout(cin[14]));
fulladd add15(.a(a[15]),.b(b[15]),.cin(cin[14]),.q(q[15]),.cout(cin[15]));
/*fulladd add0(.a(a[0]),.b(b[0]),.cin(1'b0),.q(q[0]),.cout(cin[0]));
fulladd add1[15:1](.a(a[15:1]),.b(b[15:1]),.cin(cin[14:0]),.q(q[15:1]),.cout(cin[15:1]));*/
assing q = {{17{q[15]}},q};
endmodule
/*ここでqの17~33bit目までを、上の記述のqの最上位ビットで拡張したくてこのように記述したのですが、この記述ではうまくいきません。
q =(算出された16ビットの最上位ビット × 17)と(算出された16ビット)
で33ビットにしたいわけです。どのように記述したらいいでしょうか?教えてください!!m(_ _)m
ちなみにインスタンスしたのはしたの全加算器です
//fulladder
`timescale 1ns/10ps
module fulladd(a,b,cin,q,cout);
input a,b,cin;
output q,cout;
assign q = a^b^cin;
assign cout = (a & b)|(b & cin)|(cin & a);
endmodule
お礼
Silosが手に入るCD-ROMの情報ありがとうございます。 また、xilinx社のWebPackは盲点でした。 ALTERA社のFPGAを使っていたので xilinx社のWebPackの導入も検討してみます。 ありがとうございました。