我想取IR1并将其分离为不同的变量,然后我想再次接受它并将其的第一个6位分配给c1的前6位,之后该符号将c1的第六位扩展为16我已经将c1声明为16位。
module IR(IR1,ra,rb,rc,c3,c2,c1,clk,opcode);
input [15:0]IR1;
input clk;
output reg ra,rb,rc,c3;
output reg [15:0]c1,c2;
output reg [3:0]opcode;
always@( posedge clk ) begin
opcode <=IR1[15:12];
ra<=IR1[11:9];
rb<=IR1[8:6];
rc<=IR1[5:3];
c3<=IR1[2:0];
c1<=IR1;
c2<=IR1;
end
always @( posedge clk ) begin
while(c2[5]==1||c2[5]==0) begin
c2[5:0]<=IR1[5:0];
c2[6]<=c1[5];
c2[7]<=c1[5];
c2[8]<=c1[5];
c2[9]<=c1[5];
c2[10]<=c1[5];
c2[11]<=c1[5];
c2[12]<=c1[5];
c2[13]<=c1[5];
c2[14]<=c1[5];
c2[15]<=c1[5];
end
end
endmodule
答案 0 :(得分:2)
连接 { valueA, valueB}
与复制 {REPEAT{ value }}
相结合,可以模仿手动扩展所需的代码。
localparam WIDTH = 16;
output reg [15:0]c1;
output [15:0]c2;
assign c2 = { {WIDTH-6{c1[5]}} , c1[5:0] };