Line 14... |
Line 14... |
//// Author(s): ////
|
//// Author(s): ////
|
//// - Simon Teran, simont@opencores.org ////
|
//// - Simon Teran, simont@opencores.org ////
|
//// - Dinesh Annayya, dinesha@opencores.org ////
|
//// - Dinesh Annayya, dinesha@opencores.org ////
|
//// ////
|
//// ////
|
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
|
//// v0.0 - Dinesh A, 5th Jan 2017
|
|
//// 1. Active edge of reset changed from High to Low
|
|
//////////////////////////////////////////////////////////////////////
|
//// ////
|
//// ////
|
//// Copyright (C) 2000 Authors and OPENCORES.ORG ////
|
//// Copyright (C) 2000 Authors and OPENCORES.ORG ////
|
//// ////
|
//// ////
|
//// This source file may be used and distributed without ////
|
//// This source file may be used and distributed without ////
|
//// restriction provided that this copyright statement is not ////
|
//// restriction provided that this copyright statement is not ////
|
Line 58... |
Line 61... |
|
|
`include "top_defines.v"
|
`include "top_defines.v"
|
|
|
|
|
|
|
module oc8051_sp (clk, rst, ram_rd_sel, ram_wr_sel, wr_addr, wr, wr_bit, data_in, sp_out, sp_w);
|
module oc8051_sp (clk, resetn, ram_rd_sel, ram_wr_sel, wr_addr, wr, wr_bit, data_in, sp_out, sp_w);
|
|
|
|
|
input clk, rst, wr, wr_bit;
|
input clk, resetn, wr, wr_bit;
|
input [2:0] ram_rd_sel, ram_wr_sel;
|
input [2:0] ram_rd_sel, ram_wr_sel;
|
input [7:0] data_in, wr_addr;
|
input [7:0] data_in, wr_addr;
|
output [7:0] sp_out, sp_w;
|
output [7:0] sp_out, sp_w;
|
|
|
reg [7:0] sp_out, sp_w;
|
reg [7:0] sp_out, sp_w;
|
Line 79... |
Line 82... |
assign write = ((wr_addr==`OC8051_SFR_SP) & (wr) & !(wr_bit));
|
assign write = ((wr_addr==`OC8051_SFR_SP) & (wr) & !(wr_bit));
|
|
|
assign sp_t= write ? data_in : sp;
|
assign sp_t= write ? data_in : sp;
|
|
|
|
|
always @(posedge clk or posedge rst)
|
always @(posedge clk or negedge resetn)
|
begin
|
begin
|
if (rst)
|
if (resetn == 1'b0)
|
sp <= #1 `OC8051_RST_SP;
|
sp <= #1 `OC8051_RST_SP;
|
else if (write)
|
else if (write)
|
sp <= #1 data_in;
|
sp <= #1 data_in;
|
else
|
else
|
sp <= #1 sp_out;
|
sp <= #1 sp_out;
|
Line 111... |
Line 114... |
else sp_out = sp_t - {7'b0, pop};
|
else sp_out = sp_t - {7'b0, pop};
|
|
|
end
|
end
|
|
|
|
|
always @(posedge clk or posedge rst)
|
always @(posedge clk or negedge resetn)
|
begin
|
begin
|
if (rst)
|
if (resetn == 1'b0)
|
pop <= #1 1'b0;
|
pop <= #1 1'b0;
|
else if (ram_rd_sel==`OC8051_RRS_SP) pop <= #1 1'b1;
|
else if (ram_rd_sel==`OC8051_RRS_SP) pop <= #1 1'b1;
|
else pop <= #1 1'b0;
|
else pop <= #1 1'b0;
|
end
|
end
|
|
|