代码:module add16_2(cout,sum,clk,cina,cinb,cin); input[15:0] cina,cinb;
input clk,cin;
output[15:0] sum;
output cout;
reg cout; reg cout1; reg[7:0] sum1;
reg[15:0] sum;
always @(posedge clk)
begin
{cout1,sum1} = {cina[7],cina[7:0]} + {cinb[7],cinb[7:0]} + cin;
end
always @(posedge clk)
begin
{cout,sum} = {{cina[15],cina[15:8]} + {cinb[15],cinb[15:8]} + cout1,sum1};
endendmodule 夏老师,我对上面这个{cout1,sum1} = {cina[7],cina[7:0]} + {cinb[7],cinb[7:0]} + cin; 很不理解 能不能给我说说 据网上说 {cina[15],cina[15:8]} + {cinb[15],cinb[15:8]} 是符号扩展,有符号数最高位代表符号位,防止运算时最高位被误进位 。但是据您翻译的书里面说 reg 不都是拿来用作无符号的数据么 除了以signed申明的是。 这里为什么以有符号的数据形式来计算啊 ?如果确实是以有符号的数据,{cina[15],cina[15:8]} + {cinb[15],cinb[15:8]}2个符号位相加 符号位会变么 cout1是否就为符号位 还是进位?求指导,非常感谢。。