📄 readyctrl.v
字号:
//**************************************************************************//
// Copyright (c) 1999-2005 Digital Core Design DCD //
//**************************************************************************//
// Please review the terms of the license agreement before using this file. //
// If you are not an authorized user, please destroy this source code file //
// and notify DCD immediately that you inadvertently received an //
// unauthorized copy. //
//**************************************************************************//
//////////////////////////////////////////////////////////////////////////////
// Project name : DP8051
// Project description : DP8051 Microcontroller Unit
//
// File name : READYCTRL.V
// File contents : Module READYCTRL
// Architecture SIM of READYCTRL
// Purpose : Simple "ready" generator
//
// Destination library : DP805X_LIB
//
// Design Engineer : P.K.
// Version : 3.20
// Last modification : 2005-01-03
//////////////////////////////////////////////////////////////////////////////
`timescale 1 ns / 1 ns // timescale for following modules
module readyctrl (clk, reset, sfraddr, sfrdatai, sfrwe, xdatard, xdatawr,
sfrdatao, ready);
input clk;
input reset;
input [6:0]sfraddr;
input [7:0]sfrdatai;
input sfrwe;
input xdatard;
input xdatawr;
output [7:0]sfrdatao;
output ready;
// 0x8E
parameter CKCON_ID = 7'b0001110;
// 0x8E
parameter CKCON_RV = 8'b00000111;
//**************************************************************************//
reg [2:0]ckcon_reg;
reg [3:0]ready_cnt_reg;
reg ready_cnt_zero;
reg ready_reg;
wire ready_s;
////////////////////////////////////////////////////////////////////////////
//ckcon_reg_proc:
////////////////////////////////////////////////////////////////////////////
always @(posedge clk)
begin : ckcon_reg_proc
/////////////////////////////////////////////
// Synchronous reset
/////////////////////////////////////////////
if (reset==1'b1)
ckcon_reg <= CKCON_RV[2:0];
else
/////////////////////////////////////////////
// Special function register write
/////////////////////////////////////////////
if (sfrwe==1'b1 && sfraddr==CKCON_ID)
ckcon_reg <= sfrdatai[2:0];
end
////////////////////////////////////////////////////////////////////////////
//ready_cnt_proc:
////////////////////////////////////////////////////////////////////////////
always @(posedge clk) begin : ready_cnt_reg_proc
if (reset==1'b1)
ready_cnt_reg <= 4'b0000;
else
if (ready_cnt_reg > 4'b0000)
ready_cnt_reg <= ready_cnt_reg - 1'b1;
else
begin
if ((xdatard==1'b1 || xdatawr==1'b1) &&
(ready_cnt_zero==1'b0 && ckcon_reg > 3'b001))
ready_cnt_reg <= ckcon_reg - 1'b1;
end
end
////////////////////////////////////////////////////////////////////////////
//ready_cnt_zero_proc:
////////////////////////////////////////////////////////////////////////////
always @(posedge clk) begin : ready_cnt_zero_proc
if (reset==1'b1)
ready_cnt_zero <= 1'b0;
else
ready_cnt_zero <= 1'b0;
if (ready_cnt_reg==4'b0001)
ready_cnt_zero <= 1'b1;
end
////////////////////////////////////////////////////////////////////////////
//ready_reg_proc:
////////////////////////////////////////////////////////////////////////////
always @(posedge clk) begin : ready_reg_proc
if (reset==1'b1)
ready_reg <= 1'b0;
else
begin
ready_reg <= 1'b0;
if (xdatard==1'b1 || xdatawr==1'b1)
if (ckcon_reg==3'b001)
begin
if (ready_reg==1'b0)
ready_reg <= 1'b1;
end
else
if (ready_cnt_reg==4'b0001)
ready_reg <= 1'b1;
end
end
////////////////////////////////////////////////////////////////////////////
//sfrdatao_drv:
////////////////////////////////////////////////////////////////////////////
assign sfrdatao = ckcon_reg;
////////////////////////////////////////////////////////////////////////////
//ready_s_drv:
////////////////////////////////////////////////////////////////////////////
assign ready_s = ((xdatard==1'b1 && ckcon_reg==3'b000) ? 1'b1 :
((xdatawr==1'b1 && ckcon_reg==3'b000) ? 1'b1 :
ready_reg));
////////////////////////////////////////////////////////////////////////////
//ready_drv:
////////////////////////////////////////////////////////////////////////////
assign ready = ready_s;
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -