DfT/demo_chip_rtl/rtl/demo_chip/powerdown_control.v
2026-05-29 10:19:13 +02:00

68 lines
1.8 KiB
Verilog
Executable File

// --------------------------------------------------
// Simple CPU writable register
// Outputs can be used to control power down signals
// --------------------------------------------------
module powerdown_control (
input clk,
input reset_n,
//---register access---
input [13:0] per_addr,
input [31:0] per_din,
input per_en,
input per_we,
input per_rd,
input [31:0] power_ack,
output reg [31:0] per_dout,
output reg [31:0] power_control,
output reg [31:0] power_iso
);
parameter [13:0] BASE_ADDR = 14'h400;
always @(posedge clk or negedge reset_n)
begin
if ( reset_n == 1'b0 )
begin
power_control = 32'h00000000;
power_iso = 32'h00000000;
end
else
begin
// Write reg
if ( per_en == 1'b1 && per_we == 1'b0 && per_addr[13:4] == BASE_ADDR[13:4])
begin
case (per_addr[3:0])
4'h0 : power_control = per_din;
4'h1 : power_iso = per_din;
endcase
end
end
end
// read_reg
always @(*)
begin
if ( per_en == 1'b1 && per_rd == 1'b1 && per_addr[13:4] == BASE_ADDR[13:4])
begin
case (per_addr[3:0])
4'h0 : per_dout = power_control;
4'h1 : per_dout = power_iso;
4'h2 : per_dout = power_ack;
default : per_dout = 32'h00000000;
endcase
end
else
per_dout = 32'h00000000;
end
endmodule