Line 1... |
Line 1... |
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
// AltOR32
|
// AltOR32
|
// Alternative Lightweight OpenRisc
|
// Alternative Lightweight OpenRisc
|
// V2.0
|
// V2.1
|
// Ultra-Embedded.com
|
// Ultra-Embedded.com
|
// Copyright 2011 - 2013
|
// Copyright 2011 - 2014
|
//
|
//
|
// Email: admin@ultra-embedded.com
|
// Email: admin@ultra-embedded.com
|
//
|
//
|
// License: LGPL
|
// License: LGPL
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
Line 34... |
Line 34... |
// Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
// Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
// Boston, MA 02111-1307 USA
|
// Boston, MA 02111-1307 USA
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
|
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
// Includes
|
|
//-----------------------------------------------------------------
|
|
`include "altor32_defs.v"
|
|
|
|
//-----------------------------------------------------------------
|
|
// Module - ALU
|
// Module - ALU
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
module altor32_alu
|
module altor32_alu
|
(
|
(
|
// ALU operation select
|
// ALU operation select
|
Line 56... |
Line 51... |
// Result
|
// Result
|
output [31:0] p_o /*verilator public*/,
|
output [31:0] p_o /*verilator public*/,
|
|
|
// Carry
|
// Carry
|
output reg c_o /*verilator public*/,
|
output reg c_o /*verilator public*/,
|
output reg c_update_o /*verilator public*/
|
output reg c_update_o /*verilator public*/,
|
|
|
|
// Comparison
|
|
output reg equal_o /*verilator public*/,
|
|
output reg greater_than_signed_o /*verilator public*/,
|
|
output reg greater_than_o /*verilator public*/,
|
|
output reg less_than_signed_o /*verilator public*/,
|
|
output reg less_than_o /*verilator public*/,
|
|
output flag_update_o /*verilator public*/
|
);
|
);
|
|
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
|
// Includes
|
|
//-----------------------------------------------------------------
|
|
`include "altor32_defs.v"
|
|
`include "altor32_funcs.v"
|
|
|
|
//-----------------------------------------------------------------
|
// Registers
|
// Registers
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
reg [31:0] result;
|
reg [31:0] result;
|
|
|
reg [31:16] shift_right_fill;
|
reg [31:16] shift_right_fill;
|
Line 204... |
Line 213... |
endcase
|
endcase
|
end
|
end
|
|
|
assign p_o = result;
|
assign p_o = result;
|
|
|
|
//-----------------------------------------------------------------
|
|
// Comparisons
|
|
//-----------------------------------------------------------------
|
|
always @ *
|
|
begin
|
|
if (a_i == b_i)
|
|
equal_o = 1'b1;
|
|
else
|
|
equal_o = 1'b0;
|
|
|
|
if (a_i < b_i)
|
|
less_than_o = 1'b1;
|
|
else
|
|
less_than_o = 1'b0;
|
|
|
|
if (a_i > b_i)
|
|
greater_than_o = 1'b1;
|
|
else
|
|
greater_than_o = 1'b0;
|
|
|
|
less_than_signed_o = less_than_signed(a_i, b_i);
|
|
greater_than_signed_o = ~(less_than_signed_o | equal_o);
|
|
end
|
|
|
|
assign flag_update_o = (op_i == `ALU_COMPARE);
|
|
|
endmodule
|
endmodule
|
|
|
No newline at end of file
|
No newline at end of file
|