URL
https://opencores.org/ocsvn/oms8051mini/oms8051mini/trunk
Subversion Repositories oms8051mini
Compare Revisions
- This comparison shows the changes necessary to convert path
/oms8051mini
- from Rev 24 to Rev 25
- ↔ Reverse comparison
Rev 24 → Rev 25
/trunk/rtl/8051/oc8051_acc.v
16,6 → 16,9
//// - 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 //// |
//// //// |
71,7 → 74,7
`include "top_defines.v" |
|
|
module oc8051_acc (clk, rst, |
module oc8051_acc (clk, resetn, |
bit_in, data_in, data2_in, |
data_out, |
wr, wr_bit, wr_addr, |
78,7 → 81,7
p, wr_sfr); |
|
|
input clk, rst, wr, wr_bit, bit_in; |
input clk, resetn, wr, wr_bit, bit_in; |
input [1:0] wr_sfr; |
input [7:0] wr_addr, data_in, data2_in; |
|
119,9 → 122,9
acc = data_out; |
end |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
data_out <= #1 `OC8051_RST_ACC; |
else |
data_out <= #1 acc; |
/trunk/rtl/8051/oc8051_alu.v
18,6 → 18,9
//// - Dinesh Annayya, dinesha@opencores.org //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
//// v0.0 - Dinesh A, 5th Jan 2017 |
//// 1. Active edge of reset changed from High to Low |
////////////////////////////////////////////////////////////////////// |
//// //// |
//// Copyright (C) 2001 Authors and OPENCORES.ORG //// |
//// //// |
83,7 → 86,7
|
|
|
module oc8051_alu (clk, rst, op_code, src1, src2, src3, srcCy, srcAc, bit_in, |
module oc8051_alu (clk, resetn, op_code, src1, src2, src3, srcCy, srcAc, bit_in, |
des1, des2, des_acc, desCy, desAc, desOv, sub_result); |
// |
// op_code (in) operation code [oc8051_decoder.alu_op -r] |
100,7 → 103,7
// desOv (out) Overflow output [oc8051_psw.ov_in] |
// |
|
input srcCy, srcAc, bit_in, clk, rst; |
input srcCy, srcAc, bit_in, clk, resetn; |
input [3:0] op_code; |
input [7:0] src1, src2, src3; |
output desCy, desAc, desOv; |
151,7 → 154,7
wire [15:0] inc, dec; |
|
|
oc8051_multiply oc8051_mul1(.clk(clk), .rst(rst), .enable(enable_mul), .src1(src1), .src2(src2), .des1(mulsrc1), .des2(mulsrc2), .desOv(mulOv)); |
oc8051_multiply oc8051_mul1(.clk(clk), .resetn(resetn), .enable(enable_mul), .src1(src1), .src2(src2), .des1(mulsrc1), .des2(mulsrc2), .desOv(mulOv)); |
|
|
|
159,7 → 162,7
|
|
|
oc8051_divide oc8051_div1(.clk(clk), .rst(rst), .enable(enable_div), .src1(src1), .src2(src2), .des1(divsrc1), .des2(divsrc2), .desOv(divOv)); |
oc8051_divide oc8051_div1(.clk(clk), .resetn(resetn), .enable(enable_div), .src1(src1), .src2(src2), .des1(divsrc1), .des2(divsrc2), .desOv(divOv)); |
|
/* Add */ |
assign add1 = {1'b0,src1[3:0]}; |
/trunk/rtl/8051/oc8051_alu_src_sel.v
16,6 → 16,9
//// - 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 //// |
//// //// |
60,7 → 63,7
`include "top_defines.v" |
|
|
module oc8051_alu_src_sel (clk, rst, rd, sel1, sel2, sel3, |
module oc8051_alu_src_sel (clk, resetn, rd, sel1, sel2, sel3, |
acc, ram, pc, dptr, |
|
op1, op2, op3, |
68,7 → 71,7
src1, src2, src3); |
|
|
input clk, rst, rd, sel3; |
input clk, resetn, rd, sel3; |
input [1:0] sel2; |
input [2:0] sel1; |
input [7:0] acc, ram; |
135,8 → 138,8
end |
|
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
op1_r <= #1 8'h00; |
op2_r <= #1 8'h00; |
op3_r <= #1 8'h00; |
/trunk/rtl/8051/oc8051_alu_test.v
18,6 → 18,9
//// - Dinesh Annayya, dinesha@opencores.org //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
//// v0.0 - Dinesh A, 5th Jan 2017 |
//// 1. Active edge of reset changed from High to Low |
////////////////////////////////////////////////////////////////////// |
//// //// |
//// Copyright (C) 2001 Authors and OPENCORES.ORG //// |
//// //// |
56,7 → 59,7
|
|
|
module oc8051_alu (clk, rst, op_code, src1, src2, src3, srcCy, srcAc, bit_in, des1, des2, des1_r, desCy, desAc, desOv); |
module oc8051_alu (clk, resetn, op_code, src1, src2, src3, srcCy, srcAc, bit_in, des1, des2, des1_r, desCy, desAc, desOv); |
// |
// op_code (in) operation code [oc8051_decoder.alu_op -r] |
// src1 (in) first operand [oc8051_alu_src1_sel.des] |
73,7 → 76,7
// desOv (out) Overflow output [oc8051_psw.ov_in] |
// |
|
input srcCy, srcAc, bit_in, clk, rst; input [3:0] op_code; input [7:0] src1, src2, src3; |
input srcCy, srcAc, bit_in, clk, resetn; input [3:0] op_code; input [7:0] src1, src2, src3; |
output desCy, desAc, desOv; |
output [7:0] des1, des2; |
output [7:0] des1_r; |
123,8 → 126,8
reg da_tmp; |
//reg [8:0] da1; |
|
oc8051_multiply oc8051_mul1(.clk(clk), .rst(rst), .enable(enable_mul), .src1(src1), .src2(src2), .des1(mulsrc1), .des2(mulsrc2), .desOv(mulOv)); |
oc8051_divide oc8051_div1(.clk(clk), .rst(rst), .enable(enable_div), .src1(src1), .src2(src2), .des1(divsrc1), .des2(divsrc2), .desOv(divOv)); |
oc8051_multiply oc8051_mul1(.clk(clk), .resetn(resetn), .enable(enable_mul), .src1(src1), .src2(src2), .des1(mulsrc1), .des2(mulsrc2), .desOv(mulOv)); |
oc8051_divide oc8051_div1(.clk(clk), .resetn(resetn), .enable(enable_div), .src1(src1), .src2(src2), .des1(divsrc1), .des2(divsrc2), .desOv(divOv)); |
|
/* Add */ |
assign add1 = {1'b0,src1[3:0]}; |
356,15 → 359,15
endcase |
end |
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
ides1_r <= #1 8'h0; |
end else begin |
ides1_r <= #1 ides1; |
end |
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
desCy <= #1 1'b0; |
desAc <= #1 1'b0; |
desOv <= #1 1'b0; |
/trunk/rtl/8051/oc8051_b_register.v
16,6 → 16,9
//// - 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 //// |
//// //// |
59,11 → 62,11
`include "top_defines.v" |
|
|
module oc8051_b_register (clk, rst, bit_in, data_in, wr, wr_bit, |
module oc8051_b_register (clk, resetn, bit_in, data_in, wr, wr_bit, |
wr_addr, data_out); |
|
|
input clk, rst, wr, wr_bit, bit_in; |
input clk, resetn, wr, wr_bit, bit_in; |
input [7:0] wr_addr, data_in; |
|
output [7:0] data_out; |
73,9 → 76,9
// |
//writing to b |
//must check if write high and correct address |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
data_out <= #1 `OC8051_RST_B; |
else if (wr) begin |
if (!wr_bit) begin |
/trunk/rtl/8051/oc8051_comp.v
17,6 → 17,9
//// - 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 //// |
//// //// |
/trunk/rtl/8051/oc8051_cy_select.v
16,6 → 16,9
//// - 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 //// |
//// //// |
/trunk/rtl/8051/oc8051_decoder.v
17,6 → 17,9
//// - 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 //// |
//// //// |
84,7 → 87,7
`include "top_defines.v" |
|
|
module oc8051_decoder (clk, rst, op_in, op1_c, |
module oc8051_decoder (clk, resetn, op_in, op1_c, |
ram_rd_sel_o, ram_wr_sel_o, |
bit_addr, wr_o, wr_sfr_o, |
src_sel1, src_sel2, src_sel3, |
94,7 → 97,7
|
// |
// clk (in) clock |
// rst (in) reset |
// resetn (in) reset |
// op_in (in) operation code [oc8051_op_select.op1] |
// eq (in) compare result [oc8051_comp.eq] |
// ram_rd_sel (out) select, whitch address will be send to ram for read [oc8051_ram_rd_sel.sel, oc8051_sp.ram_rd_sel] |
116,7 → 119,7
// pc_wait (out) |
// |
|
input clk, rst, eq, mem_wait, wait_data; |
input clk, resetn, eq, mem_wait, wait_data; |
input [7:0] op_in; |
|
output wr_o, bit_addr, pc_wr, rmw, istb, src_sel3; |
1311,9 → 1314,9
// |
// registerd outputs |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
ram_wr_sel <= #1 `OC8051_RWS_DC; |
src_sel1 <= #1 `OC8051_AS1_DC; |
src_sel2 <= #1 `OC8051_AS2_DC; |
2752,15 → 2755,15
|
// |
// remember current instruction |
always @(posedge clk or posedge rst) |
if (rst) op <= #1 2'b00; |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) op <= #1 2'b00; |
else if (state==2'b00) op <= #1 op_in; |
|
// |
// in case of instructions that needs more than one clock set state |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
state <= #1 2'b11; |
else if (!mem_wait & !wait_data) begin |
case (state) /* synopsys parallel_case */ |
2807,9 → 2810,9
|
// |
//in case of writing to external ram |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
mem_act <= #1 `OC8051_MAS_NO; |
end else if (!rd) begin |
mem_act <= #1 `OC8051_MAS_NO; |
2825,9 → 2828,9
endcase |
end |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
ram_rd_sel_r <= #1 3'h0; |
end else begin |
ram_rd_sel_r <= #1 ram_rd_sel; |
/trunk/rtl/8051/oc8051_divide.v
17,6 → 17,9
//// - Dinesh Annayya, dinesha@opencores.org //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
//// v0.0 - Dinesh A, 5th Jan 2017 |
//// 1. Active edge of reset changed from High to Low |
////////////////////////////////////////////////////////////////////// |
//// //// |
//// Copyright (C) 2001 Authors and OPENCORES.ORG //// |
//// //// |
52,11 → 55,11
// |
|
|
module oc8051_divide (clk, rst, enable, src1, src2, des1, des2, desOv); |
module oc8051_divide (clk, resetn, enable, src1, src2, des1, des2, desOv); |
// |
// this module is part of alu |
// clk (in) |
// rst (in) |
// resetn (in) |
// enable (in) starts divison |
// src1 (in) first operand |
// src2 (in) second operand |
65,7 → 68,7
// desOv (out) Overflow output |
// |
|
input clk, rst, enable; |
input clk, resetn, enable; |
input [7:0] src1, src2; |
output desOv; |
output [7:0] des1, des2; |
106,9 → 109,9
|
// |
// divider works in four clock cycles -- 0, 1, 2 and 3 |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
cycle <= #1 2'b0; |
tmp_div <= #1 6'h0; |
tmp_rem <= #1 8'h0; |
/trunk/rtl/8051/oc8051_dptr.v
16,6 → 16,9
//// - 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 //// |
//// //// |
57,10 → 60,10
`include "top_defines.v" |
|
|
module oc8051_dptr(clk, rst, addr, data_in, data2_in, wr, wr_sfr, wr_bit, data_hi, data_lo); |
module oc8051_dptr(clk, resetn, addr, data_in, data2_in, wr, wr_sfr, wr_bit, data_hi, data_lo); |
// |
// clk (in) clock |
// rst (in) reset |
// resetn (in) reset |
// addr (in) write address input [oc8051_ram_wr_sel.out] |
// data_in (in) destination 1 from alu [oc8051_alu.des1] |
// data2_in (in) destination 2 from alu [oc8051_alu.des2] |
72,7 → 75,7
// |
|
|
input clk, rst, wr, wr_bit; |
input clk, resetn, wr, wr_bit; |
input [1:0] wr_sfr; |
input [7:0] addr, data_in, data2_in; |
|
80,9 → 83,9
|
reg [7:0] data_hi, data_lo; |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
data_hi <= #1 `OC8051_RST_DPH; |
data_lo <= #1 `OC8051_RST_DPL; |
end else if (wr_sfr==`OC8051_WRS_DPTR) begin |
/trunk/rtl/8051/oc8051_indi_addr.v
17,6 → 17,9
//// - 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 //// |
//// //// |
58,12 → 61,12
// |
|
|
module oc8051_indi_addr (clk, rst, wr_addr, data_in, wr, wr_bit, ri_out, sel, bank); |
module oc8051_indi_addr (clk, resetn, wr_addr, data_in, wr, wr_bit, ri_out, sel, bank); |
// |
|
|
input clk, // clock |
rst, // reset |
resetn, // reset |
wr, // write |
sel, // select register |
wr_bit; // write bit addressable |
81,9 → 84,9
|
// |
//write to buffer |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
buff[3'b000] <= #1 8'h00; |
buff[3'b001] <= #1 8'h00; |
buff[3'b010] <= #1 8'h00; |
116,8 → 119,8
|
|
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
wr_bit_r <= #1 1'b0; |
end else begin |
wr_bit_r <= #1 wr_bit; |
/trunk/rtl/8051/oc8051_int.v
18,6 → 18,9
//// - 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 //// |
//// //// |
69,7 → 72,7
|
|
|
module oc8051_int (clk, rst, |
module oc8051_int (clk, resetn, |
wr_addr, |
data_in, bit_in, |
wr, wr_bit, |
86,7 → 89,7
ie, tcon, ip); |
|
input [7:0] wr_addr, data_in; |
input wr, tf0, tf1, t2_int, ie0, ie1, clk, rst, reti, wr_bit, bit_in, ack, uart_int; |
input wr, tf0, tf1, t2_int, ie0, ie1, clk, resetn, reti, wr_bit, bit_in, ack, uart_int; |
|
output tr0, tr1, intr; |
output [7:0] int_vec, |
154,9 → 157,9
|
// |
// IP |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
ip <=#1 `OC8051_RST_IP; |
end else if ((wr) & !(wr_bit) & (wr_addr==`OC8051_SFR_IP)) begin |
ip <= #1 data_in; |
166,9 → 169,9
|
// |
// IE |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
ie <=#1 `OC8051_RST_IE; |
end else if ((wr) & !(wr_bit) & (wr_addr==`OC8051_SFR_IE)) begin |
ie <= #1 data_in; |
179,9 → 182,9
// |
// tcon_s |
// |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
tcon_s <=#1 4'b0000; |
end else if ((wr) & !(wr_bit) & (wr_addr==`OC8051_SFR_TCON)) begin |
tcon_s <= #1 {data_in[6], data_in[4], data_in[2], data_in[0]}; |
198,9 → 201,9
// |
// tf1 (tmod.7) |
// |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
tcon_tf1 <=#1 1'b0; |
end else if ((wr) & !(wr_bit) & (wr_addr==`OC8051_SFR_TCON)) begin |
tcon_tf1 <= #1 data_in[7]; |
216,9 → 219,9
// |
// tf0 (tmod.5) |
// |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
tcon_tf0 <=#1 1'b0; |
end else if ((wr) & !(wr_bit) & (wr_addr==`OC8051_SFR_TCON)) begin |
tcon_tf0 <= #1 data_in[5]; |
235,9 → 238,9
// |
// ie0 (tmod.1) |
// |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
tcon_ie0 <=#1 1'b0; |
end else if ((wr) & !(wr_bit) & (wr_addr==`OC8051_SFR_TCON)) begin |
tcon_ie0 <= #1 data_in[1]; |
256,9 → 259,9
// |
// ie1 (tmod.3) |
// |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
tcon_ie1 <=#1 1'b0; |
end else if ((wr) & !(wr_bit) & (wr_addr==`OC8051_SFR_TCON)) begin |
tcon_ie1 <= #1 data_in[3]; |
275,9 → 278,9
|
// |
// interrupt processing |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
int_vec <= #1 8'h00; |
int_dept <= #1 2'b0; |
isrc[0] <= #1 3'h0; |
342,8 → 345,8
end |
|
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
tf0_buff <= #1 1'b0; |
tf1_buff <= #1 1'b0; |
ie0_buff <= #1 1'b0; |
/trunk/rtl/8051/oc8051_memory_interface.v
14,9 → 14,11
//// Author(s): //// |
//// - 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 //// |
//// //// |
88,7 → 90,7
`include "top_defines.v" |
|
|
module oc8051_memory_interface (clk, rst, |
module oc8051_memory_interface (clk, resetn, |
|
//decoder |
wr_i, |
165,7 → 167,7
|
|
input clk, |
rst, |
resetn, |
wr_i, |
wr_bit_i; |
|
367,7 → 369,7
|
|
`ifdef OC8051_SIMULATION |
always @(negedge rst) begin |
always @(negedge resetn) begin |
#5 |
if (ea_rom_sel) |
$display(" progran execution from external rom"); |
433,8 → 435,8
endcase |
end |
|
always @(posedge clk or posedge rst) |
if (rst) |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) |
rd_ind <= #1 1'b0; |
else if ((rd_sel==`OC8051_RRS_I) || (rd_sel==`OC8051_RRS_SP)) |
rd_ind <= #1 1'b1; |
461,9 → 463,9
assign iadr_o = (istb_t) ? iadr_t : pc_out; |
|
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
iadr_t <= #1 23'h0; |
istb_t <= #1 1'b0; |
imem_wait <= #1 1'b0; |
490,9 → 492,9
|
assign dadr_o = dadr_ot; |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
dwe_o <= #1 1'b0; |
dmem_wait <= #1 1'b0; |
dstb_o <= #1 1'b0; |
544,9 → 546,9
|
|
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
idat_cur <= #1 32'h0; |
idat_old <= #1 32'h0; |
end else if ((iack_i | ea_rom_sel) & (inc_pc | pc_wr_r2)) begin |
556,9 → 558,9
|
end |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
cdata <= #1 8'h00; |
cdone <= #1 1'b0; |
end else if (istb_t) begin |
652,16 → 654,16
|
// |
//in case of reti |
always @(posedge clk or posedge rst) |
if (rst) reti <= #1 1'b0; |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) reti <= #1 1'b0; |
else if ((op1_o==`OC8051_RETI) & rd & !mem_wait) reti <= #1 1'b1; |
else reti <= #1 1'b0; |
|
// |
// remember inputs |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
op2_buff <= #1 8'h0; |
op3_buff <= #1 8'h0; |
end else if (rd) begin |
754,9 → 756,9
|
assign inc_pc = ((op_pos[2] | (&op_pos[1:0])) & rd) | pc_wr_r2; |
|
always @(posedge rst or posedge clk) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
op_pos <= #1 3'h0; |
end else if (pc_wr_r2) begin |
op_pos <= #1 3'h4;// - op_length;////****?????????? |
771,8 → 773,8
// |
// remember interrupt |
// we don't want to interrupt instruction in the middle of execution |
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
int_ack_t <= #1 1'b0; |
int_vec_buff <= #1 8'h00; |
end else if (intr) begin |
780,12 → 782,12
int_vec_buff <= #1 int_v; |
end else if (rd && (ea_rom_sel || iack_i) && !pc_wr_r2) int_ack_t <= #1 1'b0; |
|
always @(posedge clk or posedge rst) |
if (rst) int_ack_buff <= #1 1'b0; |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) int_ack_buff <= #1 1'b0; |
else int_ack_buff <= #1 int_ack_t; |
|
always @(posedge clk or posedge rst) |
if (rst) int_ack <= #1 1'b0; |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) int_ack <= #1 1'b0; |
else begin |
if ((int_ack_buff) & !(int_ack_t)) |
int_ack <= #1 1'b1; |
795,15 → 797,15
|
// |
//interrupt buffer |
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
int_buff1 <= #1 1'b0; |
end else begin |
int_buff1 <= #1 int_buff; |
end |
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
int_buff <= #1 1'b0; |
end else if (intr) begin |
int_buff <= #1 1'b1; |
825,9 → 827,9
end |
|
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
pc <= #1 16'h0; |
else if (pc_wr_r2) |
pc <= #1 pc_buf; |
836,9 → 838,9
end |
|
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
pc_buf <= #1 `OC8051_RST_PC; |
end else if (pc_wr) begin |
// |
868,8 → 870,8
|
|
|
always @(posedge clk or posedge rst) |
if (rst) |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) |
ddat_ir <= #1 8'h00; |
else if (dack_i) |
ddat_ir <= #1 ddat_i; |
876,8 → 878,8
|
|
//////////////////////// |
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
rn_r <= #1 5'd0; |
ri_r <= #1 8'h00; |
imm_r <= #1 8'h00; |
901,8 → 903,8
pc_wr_r2 <= #1 pc_wr_r; |
end |
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
inc_pc_r <= #1 1'b1; |
end else if (istb) begin |
inc_pc_r <= #1 inc_pc; |
912,7 → 914,7
|
initial |
begin |
wait (!rst) |
wait (!resetn) |
if (ea_rom_sel) begin |
$display(" "); |
$display("\t Program running from internal rom !"); |
/trunk/rtl/8051/oc8051_multiply.v
17,6 → 17,9
//// - Dinesh Annayya, dinesha@opencores.org //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
//// v0.0 - Dinesh A, 5th Jan 2017 |
//// 1. Active edge of reset changed from High to Low |
////////////////////////////////////////////////////////////////////// |
//// //// |
//// Copyright (C) 2001 Authors and OPENCORES.ORG //// |
//// //// |
60,11 → 63,11
|
|
|
module oc8051_multiply (clk, rst, enable, src1, src2, des1, des2, desOv); |
module oc8051_multiply (clk, resetn, enable, src1, src2, des1, des2, desOv); |
// |
// this module is part of alu |
// clk (in) |
// rst (in) |
// resetn (in) |
// enable (in) |
// src1 (in) first operand |
// src2 (in) second operand |
73,7 → 76,7
// desOv (out) Overflow output |
// |
|
input clk, rst, enable; |
input clk, resetn, enable; |
input [7:0] src1, src2; |
output desOv; |
output [7:0] des1, des2; |
96,9 → 99,9
assign des2 = mul_result[7:0]; |
assign desOv = | des1; |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
cycle <= #1 2'b0; |
tmp_mul <= #1 16'b0; |
end else begin |
/trunk/rtl/8051/oc8051_ports.v
16,6 → 16,9
//// - Dinesh Annayya, simont@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 //// |
//// //// |
64,7 → 67,7
|
|
module oc8051_ports (clk, |
rst, |
resetn, |
bit_in, |
data_in, |
wr, |
99,7 → 102,7
rmw); |
|
input clk, //clock |
rst, //reset |
resetn, //reset |
wr, //write [oc8051_decoder.wr -r] |
wr_bit, //write bit addresable [oc8051_decoder.bit_addr -r] |
bit_in, //bit input [oc8051_alu.desCy] |
148,9 → 151,9
|
// |
// case of writing to port |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
`ifdef OC8051_PORT0 |
p0_out <= #1 `OC8051_RST_P0; |
`endif |
/trunk/rtl/8051/oc8051_psw.v
16,6 → 16,9
//// - 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 //// |
//// //// |
66,11 → 69,11
`include "top_defines.v" |
|
|
module oc8051_psw (clk, rst, wr_addr, data_in, wr, wr_bit, data_out, p, |
module oc8051_psw (clk, resetn, wr_addr, data_in, wr, wr_bit, data_out, p, |
cy_in, ac_in, ov_in, set, bank_sel); |
// |
// clk (in) clock |
// rst (in) reset |
// resetn (in) reset |
// addr (in) write address [oc8051_ram_wr_sel.out] |
// data_in (in) data input [oc8051_alu.des1] |
// wr (in) write [oc8051_decoder.wr -r] |
83,7 → 86,7
// |
|
|
input clk, rst, wr, p, cy_in, ac_in, ov_in, wr_bit; |
input clk, resetn, wr, p, cy_in, ac_in, ov_in, wr_bit; |
input [1:0] set; |
input [7:0] wr_addr, data_in; |
|
100,9 → 103,9
|
// |
//case writing to psw |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
data <= #1 `OC8051_RST_PSW; |
|
// |
/trunk/rtl/8051/oc8051_ram_256x8_two_bist.v
16,6 → 16,9
//// - 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 //// |
//// //// |
56,7 → 59,7
// |
module oc8051_ram_256x8_two_bist ( |
clk, |
rst, |
resetn, |
rd_addr, |
rd_data, |
rd_en, |
77,7 → 80,7
|
input clk, |
wr, |
rst, |
resetn, |
rd_en, |
wr_en; |
input [7:0] wr_data; |
98,7 → 101,7
xilinx_ram_dp u_ram( |
// read port |
.CLKA(clk), |
.RSTA(rst), |
.RSTA(resetn), |
.ENA(rd_en), |
.ADDRA(rd_addr), |
.DIA(8'h00), |
107,7 → 110,7
|
// write port |
.CLKB(clk), |
.RSTB(rst), |
.RSTB(resetn), |
.ENB(wr_en), |
.ADDRB(wr_addr), |
.DIB(wr_data), |
125,7 → 128,7
|
oc8051_actel_ram_256x8 u_ram( |
.RWCLK ( clk ), |
.RESET ( rst ), |
.RESET ( resetn ), |
.REN ( rd_en ), |
.RADDR ( rd_addr ), |
.RD ( rd_data ), |
140,7 → 143,7
|
generic_dpram #(8, 8) u_ram( |
.rclk ( clk ), |
.rrst ( rst ), |
.rresetn( resetn ), |
.rce ( rd_en ), |
.oe ( 1'b1 ), |
.raddr ( rd_addr ), |
147,7 → 150,7
.do ( rd_data ), |
|
.wclk ( clk ), |
.wrst ( rst ), |
.wresetn ( resetn ), |
.wce ( wr_en ), |
.we ( wr ), |
.waddr ( wr_addr ), |
172,9 → 175,9
|
// |
// reading from ram |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
rd_data <= #1 8'h0; |
else if ((wr_addr==rd_addr) & wr & rd_en) |
rd_data <= #1 wr_data; |
/trunk/rtl/8051/oc8051_ram_64x32_dual_bist.v
16,6 → 16,9
//// - 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 //// |
//// //// |
56,7 → 59,7
// |
module oc8051_ram_64x32_dual_bist ( |
clk, |
rst, |
resetn, |
|
adr0, |
dat0_o, |
81,7 → 84,7
|
input clk, |
wr1, |
rst, |
resetn, |
en0, |
en1; |
input [7:0] dat1_i; |
107,7 → 110,7
xilinx_ram_dp u_ram_dp( |
// read port |
.CLKA(clk), |
.RSTA(rst), |
.RSTA(resetn), |
.ENA(en0), |
.ADDRA(adr0), |
.DIA(32'h00), |
116,7 → 119,7
|
// write port |
.CLKB(clk), |
.RSTB(rst), |
.RSTB(resetn), |
.ENB(en1), |
.ADDRB(adr1), |
.DIB(dat1_i), |
138,7 → 141,7
|
generic_dpram #(ADR_WIDTH, 32) u_ram_dp( |
.rclk ( clk ), |
.rrst ( rst ), |
.resetn ( resetn ), |
.rce ( en0 ), |
.oe ( 1'b1 ), |
.raddr ( adr0 ), |
145,7 → 148,7
.do ( dat0_o ), |
|
.wclk ( clk ), |
.wrst ( rst ), |
.wresetn ( resetn ), |
.wce ( en1 ), |
.we ( wr1 ), |
.waddr ( adr1 ), |
160,9 → 163,9
// buffer |
reg [31:0] buff [0:(1<<ADR_WIDTH) -1]; |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
dat1_o <= #1 32'h0; |
else if (wr1) begin |
buff[adr1] <= #1 dat1_i; |
171,9 → 174,9
dat1_o <= #1 buff[adr1]; |
end |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
dat0_o <= #1 32'h0; |
else if ((adr0==adr1) & wr1) |
dat0_o <= #1 dat1_i; |
/trunk/rtl/8051/oc8051_ram_top.v
16,6 → 16,9
//// - 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 //// |
//// //// |
73,7 → 76,7
|
|
module oc8051_ram_top (clk, |
rst, |
resetn, |
rd_addr, |
rd_data, |
wr_addr, |
108,7 → 111,7
// bit_data_out (out) bit data output [oc8051_ram_sel.bit_in] |
// |
|
input clk, wr, bit_addr, bit_data_in, rst; |
input clk, wr, bit_addr, bit_data_in, resetn; |
input [7:0] wr_data; |
input [7:0] rd_addr, wr_addr; |
output bit_data_out; |
144,7 → 147,7
|
oc8051_ram_256x8_two_bist u_ram_idata( |
.clk ( clk ), |
.rst ( rst ), |
.resetn ( resetn ), |
.rd_addr ( rd_addr_m ), |
.rd_data ( rd_data_m ), |
.rd_en ( !rd_en ), |
162,8 → 165,8
`endif |
); |
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
bit_addr_r <= #1 1'b0; |
bit_select <= #1 3'b0; |
end else begin |
172,8 → 175,8
end |
|
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
rd_en_r <= #1 1'b0; |
wr_data_r <= #1 8'h0; |
end else begin |
/trunk/rtl/8051/oc8051_rom.v
16,6 → 16,9
//// - 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 //// |
//// //// |
63,11 → 66,11
// |
`include "top_defines.v" |
|
module oc8051_rom (rst, clk, addr, ea_int, data_o); |
module oc8051_rom (resetn, clk, addr, ea_int, data_o); |
|
//parameter INT_ROM_WID= 15; |
|
input rst, clk; |
input resetn, clk; |
input [15:0] addr; |
//input [22:0] addr; |
output ea_int; |
91,7 → 94,7
|
assign ea = | addr[15:INT_ROM_WID]; |
|
assign addr_rst = rst ? 16'h0000 : addr; |
assign addr_rst = resetn == 1'b0 ? 16'h0000 : addr; |
|
rom0 rom_0 (.a(addr01), .o(int_data0)); |
rom1 rom_1 (.a(addr01), .o(int_data1)); |
883,8 → 886,8
endcase |
end |
|
always @(posedge clk or posedge rst) |
if (rst) |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) |
ea_int <= #1 1'b1; |
else ea_int <= #1 !ea; |
|
903,8 → 906,8
$readmemh("./dat/oc8051_xrom.in", buff); |
end |
|
always @(posedge clk or posedge rst) |
if (rst) |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) |
ea_int <= #1 1'b1; |
else ea_int <= #1 !ea; |
|
/trunk/rtl/8051/oc8051_sfr.v
16,6 → 16,9
//// - 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 //// |
//// //// |
93,7 → 96,7
`include "top_defines.v" |
|
|
module oc8051_sfr (rst, clk, |
module oc8051_sfr (resetn, clk, |
adr0, adr1, dat0, |
dat1, dat2, bit_in, |
des_acc, |
155,7 → 158,7
wait_data); |
|
|
input rst, // reset - pin |
input resetn, // reset - pin |
clk, // clock - pin |
we, // write enable |
bit_in, |
307,7 → 310,7
// accumulator |
// ACC |
oc8051_acc oc8051_acc1(.clk(clk), |
.rst(rst), |
.resetn(resetn), |
.bit_in(bit_in), |
.data_in(des_acc), |
.data2_in(dat2), |
323,7 → 326,7
// b register |
// B |
oc8051_b_register oc8051_b_register (.clk(clk), |
.rst(rst), |
.resetn(resetn), |
.bit_in(bit_in), |
.data_in(des_acc), |
.wr(we), |
335,7 → 338,7
//stack pointer |
// SP |
oc8051_sp oc8051_sp1(.clk(clk), |
.rst(rst), |
.resetn(resetn), |
.ram_rd_sel(ram_rd_sel), |
.ram_wr_sel(ram_wr_sel), |
.wr_addr(adr1), |
349,7 → 352,7
//data pointer |
// DPTR, DPH, DPL |
oc8051_dptr oc8051_dptr1(.clk(clk), |
.rst(rst), |
.resetn(resetn), |
.addr(adr1), |
.data_in(des_acc), |
.data2_in(dat2), |
364,7 → 367,7
//program status word |
// PSW |
oc8051_psw oc8051_psw1 (.clk(clk), |
.rst(rst), |
.resetn(resetn), |
.wr_addr(adr1), |
.data_in(dat1), |
.wr(we), |
382,7 → 385,7
// P0, P1, P2, P3 |
`ifdef OC8051_PORTS |
oc8051_ports oc8051_ports1(.clk(clk), |
.rst(rst), |
.resetn(resetn), |
.bit_in(bit_in), |
.data_in(dat1), |
.wr(we), |
421,7 → 424,7
// SCON, SBUF |
`ifdef OC8051_UART |
oc8051_uart oc8051_uatr1 (.clk(clk), |
.rst(rst), |
.resetn(resetn), |
.bit_in(bit_in), |
.data_in(dat1), |
.wr(we), |
449,7 → 452,7
// interrupt control |
// IP, IE, TCON |
oc8051_int oc8051_int1 (.clk(clk), |
.rst(rst), |
.resetn(resetn), |
.wr_addr(adr1), |
.bit_in(bit_in), |
.ack(int_ack), |
477,7 → 480,7
// TH0, TH1, TL0, TH1, TMOD |
`ifdef OC8051_TC01 |
oc8051_tc oc8051_tc1(.clk(clk), |
.rst(rst), |
.resetn(resetn), |
.wr_addr(adr1), |
.data_in(dat1), |
.wr(we), |
506,7 → 509,7
// TH2, TL2, RCAPL2L, RCAPL2H, T2CON |
`ifdef OC8051_TC2 |
oc8051_tc2 oc8051_tc21(.clk(clk), |
.rst(rst), |
.resetn(resetn), |
.wr_addr(adr1), |
.data_in(dat1), |
.wr(we), |
533,8 → 536,8
|
|
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
adr0_r <= #1 8'h00; |
ram_wr_sel_r <= #1 3'b000; |
wr_bit_r <= #1 1'b0; |
563,9 → 566,9
|
// |
//set output in case of address (byte) |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
dat0 <= #1 8'h00; |
wait_data <= #1 1'b0; |
end else if ((wr_sfr==`OC8051_WRS_DPTR) & (adr0==`OC8051_SFR_DPTR_LO)) begin //write and read same address |
651,9 → 654,9
// |
//set output in case of address (bit) |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
bit_out <= #1 1'h0; |
else if ( |
((adr1[7:3]==adr0[7:3]) & (~&adr1[2:0]) & we & !wr_bit_r) | |
703,9 → 706,9
endcase |
end |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
prescaler <= #1 4'h0; |
pres_ow <= #1 1'b0; |
end else if (prescaler==4'b1011) begin |
/trunk/rtl/8051/oc8051_sp.v
16,6 → 16,9
//// - 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 //// |
//// //// |
60,10 → 63,10
|
|
|
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 [7:0] data_in, wr_addr; |
output [7:0] sp_out, sp_w; |
81,9 → 84,9
assign sp_t= write ? data_in : sp; |
|
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
sp <= #1 `OC8051_RST_SP; |
else if (write) |
sp <= #1 data_in; |
113,9 → 116,9
end |
|
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
pop <= #1 1'b0; |
else if (ram_rd_sel==`OC8051_RRS_SP) pop <= #1 1'b1; |
else pop <= #1 1'b0; |
/trunk/rtl/8051/oc8051_tc.v
16,6 → 16,9
//// - 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 //// |
//// //// |
66,7 → 69,7
|
|
|
module oc8051_tc (clk, rst, |
module oc8051_tc (clk, resetn, |
data_in, |
wr_addr, |
wr, wr_bit, |
81,7 → 84,7
input [7:0] wr_addr, |
data_in; |
input clk, |
rst, |
resetn, |
wr, |
wr_bit, |
ie0, |
112,9 → 115,9
// |
// read or write from one of the addresses in tmod |
// |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
tmod <=#1 `OC8051_RST_TMOD; |
end else if ((wr) & !(wr_bit) & (wr_addr==`OC8051_SFR_TMOD)) |
tmod <= #1 data_in; |
123,9 → 126,9
// |
// TIMER COUNTER 0 |
// |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
tl0 <=#1 `OC8051_RST_TL0; |
th0 <=#1 `OC8051_RST_TH0; |
tf0 <= #1 1'b0; |
184,9 → 187,9
// |
// TIMER COUNTER 1 |
// |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
tl1 <=#1 `OC8051_RST_TL1; |
th1 <=#1 `OC8051_RST_TH1; |
tf1_1 <= #1 1'b0; |
227,8 → 230,8
end |
|
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
t0_buff <= #1 1'b0; |
t1_buff <= #1 1'b0; |
end else begin |
/trunk/rtl/8051/oc8051_tc2.v
16,6 → 16,9
//// - 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 //// |
//// //// |
58,7 → 61,7
|
|
|
module oc8051_tc2 (clk, rst, |
module oc8051_tc2 (clk, resetn, |
wr_addr, |
data_in, bit_in, |
wr, wr_bit, |
72,7 → 75,7
input [7:0] wr_addr, |
data_in; |
input clk, |
rst, |
resetn, |
wr, |
wr_bit, |
t2, |
111,9 → 114,9
assign ct2 = t2con[1]; |
assign cprl2 = t2con[0]; |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
t2con <= #1 `OC8051_RST_T2CON; |
end else if ((wr) & !(wr_bit) & (wr_addr==`OC8051_SFR_T2CON)) begin |
t2con <= #1 data_in; |
131,9 → 134,9
//th2, tl2 |
assign run = tr2 & ((!ct2 & pres_ow) | (ct2 & tc2_event)); |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
// |
// reset |
// |
194,9 → 197,9
|
// |
// rcap2l, rcap2h |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
rcap2l <= #1 `OC8051_RST_RCAP2L; |
rcap2h <= #1 `OC8051_RST_RCAP2H; |
end else if ((wr) & !(wr_bit) & (wr_addr==`OC8051_SFR_RCAP2H)) begin |
212,9 → 215,9
|
// |
// |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
neg_trans <= #1 1'b0; |
t2ex_r <= #1 1'b0; |
end else if (t2ex) begin |
231,9 → 234,9
|
// |
// |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
tc2_event <= #1 1'b0; |
t2_r <= #1 1'b0; |
end else if (t2) begin |
/trunk/rtl/8051/oc8051_top.v
17,6 → 17,8
////////////////////////////////////////////////////////////////////// |
//// v0.0 - Dinesh A, 8th Dec 2016 |
//// 1. External ROM Interface Removed |
//// v0.1 - Dinesh A, 5th Jan 2017 |
//// 1. Active edge of reset changed from High to Low |
//// //// |
////////////////////////////////////////////////////////////////////// |
//// //// |
113,7 → 115,7
|
`include "top_defines.v" |
|
module oc8051_top (wb_rst_i, wb_clk_i, |
module oc8051_top (resetn, wb_clk_i, |
|
//interface to data ram |
wbd_dat_i, |
181,7 → 183,7
|
|
|
input wb_rst_i, // reset input |
input resetn, // reset input |
wb_clk_i, // clock input |
int0_i, // interrupt 0 |
int1_i, // interrupt 1 |
350,7 → 352,7
// decoder |
oc8051_decoder u_decoder( |
.clk (wb_clk_i ), |
.rst (wb_rst_i ), |
.resetn (resetn ), |
.op_in (op1_n ), |
.op1_c (op1_cur ), |
.ram_rd_sel_o (ram_rd_sel ), |
383,7 → 385,7
// |
//alu |
oc8051_alu u_alu( |
.rst (wb_rst_i ), |
.resetn (resetn ), |
.clk (wb_clk_i ), |
.op_code (alu_op ), |
.src1 (src1 ), |
405,7 → 407,7
//data ram |
oc8051_ram_top u_ram_top( |
.clk (wb_clk_i ), |
.rst (wb_rst_i ), |
.resetn (resetn ), |
.rd_addr (rd_addr ), |
.rd_data (ram_data ), |
.wr_addr (wr_addr ), |
429,7 → 431,7
|
oc8051_alu_src_sel u_alu_src_sel( |
.clk (wb_clk_i ), |
.rst (wb_rst_i ), |
.resetn (resetn ), |
.rd (rd ), |
|
.sel1 (src_sel1 ), |
466,7 → 468,7
//program rom |
`ifdef OC8051_ROM |
oc8051_rom u_rom( |
.rst (wb_rst_i ), |
.resetn (resetn ), |
.clk (wb_clk_i ), |
.ea_int (ea_int ), |
.addr (iadr_o ), |
501,7 → 503,7
// |
oc8051_indi_addr u_indi_addr ( |
.clk (wb_clk_i ), |
.rst (wb_rst_i ), |
.resetn (resetn ), |
.wr_addr (wr_addr ), |
.data_in (wr_dat ), |
.wr (wr_o ), |
517,7 → 519,7
// |
oc8051_memory_interface u_memory_interface( |
.clk (wb_clk_i ), |
.rst (wb_rst_i ), |
.resetn (resetn ), |
// internal ram |
.wr_i (wr ), |
.wr_o (wr_o ), |
594,7 → 596,7
// |
|
oc8051_sfr u_sfr( |
.rst (wb_rst_i ), |
.resetn (resetn ), |
.clk (wb_clk_i ), |
.adr0 (rd_addr[7:0] ), |
.adr1 (wr_addr[7:0] ), |
712,9 → 714,9
|
// Assumption, Both Write and Read access will not be |
// possbile in single clock cycle |
always @(posedge wb_clk_i or posedge wb_rst_i) |
always @(posedge wb_clk_i or negedge resetn) |
begin |
if(wb_rst_i) begin |
if(resetn == 1'b0) begin |
pushpop_cnt = 0; |
end |
else begin |
/trunk/rtl/8051/oc8051_uart.v
16,6 → 16,9
//// - 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 //// |
//// //// |
67,7 → 70,7
|
`include "top_defines.v" |
|
module oc8051_uart (rst, clk, |
module oc8051_uart (resetn, clk, |
bit_in, data_in, |
wr_addr, |
wr, wr_bit, |
78,7 → 81,7
//registers |
scon, pcon, sbuf); |
|
input rst, |
input resetn, |
clk, |
bit_in, |
wr, |
131,9 → 134,9
assign rb8 = scon[2]; |
assign ri = scon[0]; |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
scon <= #1 `OC8051_RST_SCON; |
else if ((wr) & !(wr_bit) & (wr_addr==`OC8051_SFR_SCON)) |
scon <= #1 data_in; |
157,9 → 160,9
// |
wire smod; |
assign smod = pcon[7]; |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) |
if (resetn == 1'b0) |
begin |
pcon <= #1 `OC8051_RST_PCON; |
end else if ((wr_addr==`OC8051_SFR_PCON) & (wr) & !(wr_bit)) |
174,9 → 177,9
wire wr_sbuf; |
assign wr_sbuf = (wr_addr==`OC8051_SFR_SBUF) & (wr) & !(wr_bit); |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
txd <= #1 1'b1; |
tr_count <= #1 4'd0; |
trans <= #1 1'b0; |
244,9 → 247,9
end |
end |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
smod_clk_tr <= #1 1'b0; |
shift_tr <= #1 1'b0; |
end else if (sc_clk_tr) begin |
265,9 → 268,9
// |
//serial port buffer (receive) |
// |
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
re_count <= #1 4'd0; |
receive <= #1 1'b0; |
sbuf_rxd <= #1 8'h00; |
325,9 → 328,9
end |
end |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
smod_clk_re <= #1 1'b0; |
shift_re <= #1 1'b0; |
end else if (sc_clk_re) begin |
348,9 → 351,9
// |
// |
|
always @(posedge clk or posedge rst) |
always @(posedge clk or negedge resetn) |
begin |
if (rst) begin |
if (resetn == 1'b0) begin |
t1_ow_buf <= #1 1'b0; |
end else begin |
t1_ow_buf <= #1 t1_ow; |
/trunk/rtl/8051/oc8051_wb_iinterface.v
16,6 → 16,9
//// - 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 //// |
//// //// |
64,14 → 67,14
// |
|
|
module oc8051_wb_iinterface(rst, clk, |
module oc8051_wb_iinterface(resetn, clk, |
adr_i, dat_o, cyc_i, stb_i, ack_o, |
adr_o, dat_i, cyc_o, stb_o, ack_i |
); |
// |
// rst (in) reset - pin |
// resetn (in) reset - pin |
// clk (in) clock - pini |
input rst, clk; |
input resetn, clk; |
|
// |
// interface to oc8051 cpu |
113,8 → 116,8
assign cyc_o = stb_o; |
//assign adr_o = ack_i ? adr : adr_i; |
|
always @(posedge clk or posedge rst) |
if (rst) begin |
always @(posedge clk or negedge resetn) |
if (resetn == 1'b0) begin |
stb_o <= #1 1'b0; |
adr_o <= #1 16'h0000; |
end else if (ack_i) begin |
/trunk/rtl/clkgen/clkgen.v
17,6 → 17,9
//// Revision : Nov 26, 2016 //// |
//// //// |
////////////////////////////////////////////////////////////////////// |
//// v0.0 - Dinesh A, 5th Jan 2017 |
//// 1. Active edge of reset changed from High to Low |
////////////////////////////////////////////////////////////////////// |
//// //// |
//// Copyright (C) 2000 Authors and OPENCORES.ORG //// |
//// //// |
51,7 → 54,7
xtal_clk , |
clkout , |
gen_resetn , |
risc_reset , |
risc_resetn , |
app_clk , |
uart_ref_clk |
); |
58,13 → 61,13
|
|
|
input reset_n ; // Async reset signal |
input reset_n ; // Async reset signal |
input fastsim_mode ; // fast sim mode = 1 |
input mastermode ; // 1 : Risc master mode |
input xtal_clk ; // Xtal clock-25Mhx |
input xtal_clk ; // Xtal clock-25Mhx |
output clkout ; // clock output, 250Mhz |
output gen_resetn ; // internally generated reset |
output risc_reset ; // internally generated reset |
output risc_resetn ; // internally generated reset |
output app_clk ; // application clock |
output uart_ref_clk ; // uart 16x Ref clock |
|
75,10 → 78,10
wire run_st ; |
wire slave_run_st ; |
reg pll_done ; |
reg [11:0] pll_count ; |
reg [2:0] clkgen_ps ; |
reg [11:0] pll_count ; |
reg [2:0] clkgen_ps ; |
reg gen_resetn ; // internally generated reset |
reg risc_reset ; // internally generated reset |
reg risc_resetn ; // internally generated reset |
|
|
assign clkout = app_clk; |
141,16 → 144,16
begin |
if (!reset_n) begin |
gen_resetn <= 0; |
risc_reset <= 1; |
risc_resetn <= 0; |
end else if(run_st ) begin |
gen_resetn <= 1; |
risc_reset <= 0; |
risc_resetn <= 1; |
end else if(slave_run_st ) begin |
gen_resetn <= 1; |
risc_reset <= 1; // Keet Risc in Reset |
risc_resetn <= 0; // Keet Risc in Reset |
end else begin |
gen_resetn <= 0; |
risc_reset <= 1; |
risc_resetn <= 0; |
end |
end |
|
/trunk/rtl/core/digital_core.v
229,7 → 229,7
. xtal_clk (xtal_clk ), |
. clkout (clkout ), |
. gen_resetn (gen_resetn ), |
. risc_reset (risc_reset ), |
. risc_resetn (risc_resetn ), |
. app_clk (app_clk ), |
. uart_ref_clk (uart_clk_16x ) |
|
442,7 → 442,7
|
|
oc8051_top u_8051_core ( |
. wb_rst_i (risc_reset ), |
. resetn (risc_resetn ), |
. wb_clk_i (app_clk ), |
|
//interface to data ram |
/trunk/verif/run/filelist_rtl.f
51,4 → 51,4
../../rtl/model/oc8051_xram.v \ |
../../rtl/model/oc8051_xrom.v \ |
../../rtl/msg_handler/msg_handler.v \ |
../../rtl/msg_handler/msg_handler_top.v |
../../rtl/msg_handler/msg_handler_top.v |
/trunk/verif/run/run_modelsim
11,7 → 11,8
set misc_tests=(uart_test_1 spi_test_1) |
#set misc_tests=( ) |
|
set risc_int_tests=(fib divmul sort gcd cast xram all_instr) |
set risc_int_tests=(fib divmul sort gcd cast xram ) |
#set risc_int_tests=(fib divmul sort gcd cast xram all_instr) |
|
echo " Compiling with MODELSIM " |
|