fixed decoder
diff --git a/verilog/dv/decoder_test/decoder.sv b/verilog/dv/decoder_test/decoder.sv
index 94d8e2a..02a0a56 100644
--- a/verilog/dv/decoder_test/decoder.sv
+++ b/verilog/dv/decoder_test/decoder.sv
@@ -13,36 +13,20 @@
module decoder (input logic [31:0] target,
output logic [255:0] fullTarget);
- logic [3:0] sizeTens;
- logic [3:0] sizeOnes;
- logic [255:0] decoded;
- integer spacing;
- integer leftBuffer;
+ logic [7:0] shift_amount;
+ logic [255:0] temp_reg;
integer i;
initial begin
- sizeTens=target[31:28];
- sizeOnes=target[27:24];
- //IDK if this is legal
- spacing = sizeTens*16+sizeOnes;
+ shift_amount=target[31:24];
- leftBuffer = 32-spacing;
-
- //Pad left side based on first 2 bytes
- for(i=255;i>254-leftBuffer;i--)
- decoded[i] = 0;
+ for(i = 23;i>-1;i--)
+ temp_reg[232+i]=target[i];
- //Set value within middle of target
- i=0;
- while(i<24) begin
- decoded[255-leftBuffer-25+i] = target[i];
- i++;
- end
- //Pad the rest
- for(i=255-leftBuffer-26;i>-1;i--)
- decoded[i]=0;
+ for(i = 231;i>-1;i--)
+ temp_reg[i]=0;
- fullTarget = decoded;
+ assign fullTarget = temp_reg >> shift_amount;
end
diff --git a/verilog/rtl/decoder.sv b/verilog/rtl/decoder.sv
index 9564e49..02a0a56 100644
--- a/verilog/rtl/decoder.sv
+++ b/verilog/rtl/decoder.sv
@@ -7,31 +7,27 @@
*
* Used to transform a 32 bit target into a 256 bit target using math magic.
*
- *
*-------------------------------------------------------------
*/
-module decoder #(input logic [31:0] target,
+module decoder (input logic [31:0] target,
output logic [255:0] fullTarget);
- logic [3:0] sizeTens;
- logic [3:0] sizeOnes;
+ logic [7:0] shift_amount;
+ logic [255:0] temp_reg;
+ integer i;
+ initial begin
- sizeTens<=target[31:28];
- sizeOnes<=target[27:24];
+ shift_amount=target[31:24];
- //IDK if this is legal
- integer spacing = sizeTens*16+sizeOnes;
+ for(i = 23;i>-1;i--)
+ temp_reg[232+i]=target[i];
+
+ for(i = 231;i>-1;i--)
+ temp_reg[i]=0;
- integer leftBuffer = 32-spacing;
-
- //Todo figure out how to set all these values to 0
- fullTarget[255:255-leftBuffer] = 0;
-
- //Todo figure out how to set all these values to target[23:0]
- fullTarget[255-leftBuffer-1:255-leftBuffer-25] = target[23:0];
-
- fullTarget[255-leftBuffer-26:0]=0;
+ assign fullTarget = temp_reg >> shift_amount;
+ end
endmodule