标志从6到16位扩展

时间:2015-03-10 07:50:37

标签: verilog

我想取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

1 个答案:

答案 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] };