串口版本太复杂,新增简单的spi版本—基本仿真无误
This commit is contained in:
parent
9f29575d70
commit
7d227dad2e
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_131020_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_131039_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_131040_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_14790_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_14816_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_26119_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_30584_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_30603_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_34047_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_34065_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_37423_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_37441_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_39101_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_39120_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_40330_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_40348_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_41475_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_41494_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_42301_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_42320_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_43406_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_43443_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_45855_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_45891_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_50099_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_50120_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_52045_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_52081_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_53444_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_53462_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_54606_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_54624_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_56094_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_56112_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_57246_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_57264_archive_1.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_csrc0.so
|
||||
|
|
@ -1 +0,0 @@
|
|||
.//../simv.daidir//_prev_archive_1.so
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company:
|
||||
// Engineer:
|
||||
//
|
||||
// Create Date: 2026/04/03 22:01:15
|
||||
// Design Name:
|
||||
// Module Name: digital_top
|
||||
// Project Name:
|
||||
// Target Devices:
|
||||
// Tool Versions:
|
||||
// Description:
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
module digital_top(
|
||||
input clk,
|
||||
input rst_n,
|
||||
//spi_slave
|
||||
input sclk,
|
||||
input [4:0]cfgid,
|
||||
input csn,
|
||||
input mosi,
|
||||
output miso,
|
||||
output oen,
|
||||
//pulse_counter
|
||||
input sig_in
|
||||
);
|
||||
|
||||
wire [31:0] wrdata;
|
||||
wire [24:0] addr;
|
||||
wire wren;
|
||||
wire rden;
|
||||
wire [31:0]rddata;
|
||||
|
||||
wire [23:0] win_us;
|
||||
wire cnt_vld;
|
||||
wire [23:0]cnt_out;
|
||||
|
||||
|
||||
// 实例化 DUT
|
||||
spi_sys u_spi_sys (
|
||||
.clk (clk ),
|
||||
.rst_n (rst_n ),
|
||||
.cfgid (cfgid ),
|
||||
.sclk (sclk ),
|
||||
.csn (csn ),
|
||||
.mosi (mosi ),
|
||||
.miso (miso ),
|
||||
.oen (oen ),
|
||||
.wrdata (wrdata ),
|
||||
.addr (addr ),
|
||||
.wren (wren ),
|
||||
.rden (rden ),
|
||||
.rddata (rddata )
|
||||
);
|
||||
|
||||
system_regfile u_system_regfile (
|
||||
.clk (clk),
|
||||
.rst_n (rst_n),
|
||||
.wrdata (wrdata),
|
||||
.wren (wren),
|
||||
.rwaddr (addr),
|
||||
.rden (rden),
|
||||
.rddata (rddata),
|
||||
// digital_thermometer
|
||||
.win_us(win_us),
|
||||
.pulse_cnt_out(cnt_out),
|
||||
.pules_cnt_vld(cnt_vld)
|
||||
);
|
||||
|
||||
|
||||
pulse_cnt #(
|
||||
.CLK_FREQ(50_000_000)
|
||||
) u_pulse_cnt (
|
||||
.clk (clk),
|
||||
.rst_n (rst_n),
|
||||
.sig_in (sig_in),
|
||||
.win_us (win_us),
|
||||
.cnt_out(cnt_out),
|
||||
.vld_out(cnt_vld)
|
||||
);
|
||||
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,292 @@
|
|||
//+FHDR--------------------------------------------------------------------------------------------------------
|
||||
// Company:
|
||||
//-----------------------------------------------------------------------------------------------------------------
|
||||
// File Name : spi_sys.v
|
||||
// Department :
|
||||
// Author : PWY
|
||||
// Author's Tel :
|
||||
//-----------------------------------------------------------------------------------------------------------------
|
||||
// Relese History
|
||||
// Version Date Author Description
|
||||
// 0.1 2024-04-13 PWY SPI BUS for System
|
||||
// 0.2 2024-06-24 PWY {spi_dout[31:0],1'b0} -> {spi_dout[30:0],1'b0}
|
||||
//-----------------------------------------------------------------------------------------------------------------
|
||||
// Keywords :
|
||||
//
|
||||
//-----------------------------------------------------------------------------------------------------------------
|
||||
// Parameter
|
||||
//
|
||||
//-----------------------------------------------------------------------------------------------------------------
|
||||
// Purpose :
|
||||
//
|
||||
//-----------------------------------------------------------------------------------------------------------------
|
||||
// Target Device:
|
||||
// Tool versions:
|
||||
//-----------------------------------------------------------------------------------------------------------------
|
||||
// Reuse Issues
|
||||
// Reset Strategy:
|
||||
// Clock Domains:
|
||||
// Critical Timing:
|
||||
// Asynchronous I/F:
|
||||
// Synthesizable (y/n):
|
||||
// Other:
|
||||
//-FHDR--------------------------------------------------------------------------------------------------------
|
||||
|
||||
//-----------------------------Spi Frame-------------------------------------------------------------------------------------
|
||||
////MSB------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..............................................>>>>>>>>------->LSB
|
||||
///|<-----------MSB 32 bits------------------->||<---------Second 32-bit---->||<-------x 32-bit---->||<-------n 32-bit---->|
|
||||
// +-----++----------------------++------------++-----++---------------------++---------------------++---------------------+
|
||||
// | 31 || 30:6 || 5:1 || 0 || 31:0 || ...... || 31:0 |
|
||||
// +-----++----------------------++------------++-----++---------------------++---------------------++---------------------+
|
||||
// +-----++----------------------++------------++-----++---------------------++---------------------++---------------------+
|
||||
// | wnr || addr[24:0] || CHIPID ||resv || data[31:0] || ...... || data[31:0] |
|
||||
// +-----++----------------------++------------++-----++---------------------++---------------------++---------------------+
|
||||
//-----------------------------Spi Frame-------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
module spi_sys (
|
||||
//system port
|
||||
input clk // System Main Clock
|
||||
,input rst_n // Spi Reset active low
|
||||
//cfg ID
|
||||
,input [4 :0] cfgid //ID number for the entire chip
|
||||
//spi port
|
||||
,input sclk // Spi Clock
|
||||
,input csn // Spi Chip Select active low
|
||||
,input mosi // Spi Mosi
|
||||
,output miso // Spi Miso
|
||||
,output oen // Spi Miso output enable
|
||||
|
||||
,output [31:0] wrdata //write data to sram
|
||||
,output [24:0] addr //sram address
|
||||
,output wren //write enable sram
|
||||
,output rden //rden enable sram
|
||||
,input [31:0] rddata //read data from sram
|
||||
|
||||
);
|
||||
|
||||
localparam IDLE = 2'b00,
|
||||
RECVCMD = 2'b01,
|
||||
WRITE = 2'b10,
|
||||
READ = 2'b11;
|
||||
//-----------------------------------------------------------------------
|
||||
//SPI module reset processing
|
||||
//-----------------------------------------------------------------------
|
||||
//spi_rstn
|
||||
//wire spi_rstn;
|
||||
//assign spi_rstn = rst_n & (~csn);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//capture the sck
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
wire [2:0] sclk_reg;
|
||||
//sync sclk to the main clock using a 3-bits shift register
|
||||
sirv_gnrl_dffrs #(3) sclk_reg_dffrs ({sclk_reg[1:0],sclk}, sclk_reg, clk, rst_n);
|
||||
|
||||
//sclk's rising edges
|
||||
wire sclk_p = (sclk_reg[2:1] == 2'b01);
|
||||
|
||||
//sclk's falling edges
|
||||
//assign sclk_n = (sclk_reg[2:1] == 2'b10);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//capture the csn
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
wire [2:0] csn_reg;
|
||||
//sync csn to the main clock using a 2-bits shift register
|
||||
|
||||
sirv_gnrl_dffrs #(3) csn_reg_dffrs ({csn_reg[1:0],csn}, csn_reg, clk, rst_n);
|
||||
// csn is active low
|
||||
wire csn_active = ~csn_reg[1];
|
||||
|
||||
//csn's rising edges
|
||||
wire csn_p = (csn_reg[2:1] == 2'b01);
|
||||
|
||||
//csn's falling edges
|
||||
wire csn_n = (csn_reg[2:1] == 2'b10);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//capture the mosi
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
wire [1:0] mosi_reg;
|
||||
//sync mosi to the main clock using a 2-bits shift register
|
||||
|
||||
sirv_gnrl_dffr #(2) mosi_reg_dffr ({mosi_reg[0],mosi}, mosi_reg, clk, rst_n);
|
||||
//mosi_data
|
||||
wire mosi_data = mosi_reg[1];
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
//cnt
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
wire [4:0] cnt_c;
|
||||
//add_cnt
|
||||
wire add_cnt = sclk_p && csn_active;
|
||||
//end_cnt
|
||||
wire end_cnt = (add_cnt && (cnt_c == 5'd31)) | csn_p;
|
||||
|
||||
wire [4:0] cnt_n = end_cnt ? 5'h0 :
|
||||
add_cnt ? cnt_c + 5'b1 :
|
||||
cnt_c ;
|
||||
|
||||
|
||||
sirv_gnrl_dffr #(5) cnt_c_dffr (cnt_n, cnt_c, clk, rst_n);
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//SPI data sample
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
generate
|
||||
genvar i;
|
||||
wire [31:0] recv_vld ;
|
||||
wire [31:0] spi_din ;
|
||||
for(i=0;i<32;i=i+1) begin: spi_sys_recv
|
||||
assign recv_vld[i] = add_cnt & (cnt_c == i );
|
||||
sirv_gnrl_dfflr #(1) spi_din_dfflr (recv_vld[i], mosi_data, spi_din[31-i], clk, rst_n);
|
||||
end
|
||||
endgenerate
|
||||
|
||||
|
||||
wire [1:0] state_c;
|
||||
wire [1:0] state_n;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//init_addr capture
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
wire [24:0] initaddr;
|
||||
wire initaddr_vld = (state_c == RECVCMD ) & add_cnt && (cnt_c == 5'd26);
|
||||
wire [1:0] initaddr_vld_r;
|
||||
sirv_gnrl_dffr #(2) initaddr_vld_r_dffr ({initaddr_vld_r[0],initaddr_vld}, initaddr_vld_r, clk, rst_n);
|
||||
|
||||
sirv_gnrl_dfflr #(25) initaddr_dfflr (initaddr_vld_r[0], spi_din[30:6], initaddr, clk, rst_n);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//CMD capture
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
wire cmd ;
|
||||
sirv_gnrl_dfflr #(1) cmd_dfflr ( initaddr_vld_r[0], spi_din[31], cmd, clk, rst_n);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//CHIPID capture
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
wire [4:0] chipid;
|
||||
wire [1:0] chipid_vld_r;
|
||||
wire chipid_vld = (state_c == RECVCMD ) & add_cnt & (cnt_c == 5'd30);
|
||||
//register cmd_vld to align it with cmd
|
||||
sirv_gnrl_dffr #(2) chipid_vld_r_dffr ({chipid_vld_r[0],chipid_vld}, chipid_vld_r, clk, rst_n);
|
||||
|
||||
sirv_gnrl_dfflr #(5) chipid_dfflr (chipid_vld_r[0], spi_din[5:1], chipid, clk, rst_n);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//ID matching determination
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
wire chipid_match = (chipid == cfgid);
|
||||
wire chipid_dismatch = (chipid != cfgid);
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//SPI Module State Machine
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Generating jump conditions for state machines
|
||||
wire ilde2recvcmd = (state_c == IDLE ) && csn_active && csn_n ;
|
||||
wire recvcmd2ilde = (state_c == RECVCMD ) && chipid_dismatch & end_cnt;
|
||||
wire recvcmd2write = (state_c == RECVCMD ) && chipid_match && ~cmd & end_cnt;
|
||||
wire recvcmd2read = (state_c == RECVCMD ) && chipid_match && cmd & end_cnt;
|
||||
wire write2idle = (state_c == WRITE ) && csn_p;
|
||||
wire read2idle = (state_c == READ ) && csn_p;
|
||||
|
||||
//The first section of the state machine
|
||||
//state_c
|
||||
sirv_gnrl_dffr #(2) state_c_dffr (state_n, state_c, clk, rst_n);
|
||||
|
||||
//state_n
|
||||
assign state_n = ((state_c == IDLE ) && ilde2recvcmd ) ? RECVCMD :
|
||||
((state_c == RECVCMD ) && recvcmd2ilde ) ? IDLE :
|
||||
((state_c == RECVCMD ) && recvcmd2write ) ? WRITE :
|
||||
((state_c == RECVCMD ) && recvcmd2read ) ? READ :
|
||||
((state_c == WRITE ) && write2idle ) ? IDLE :
|
||||
((state_c == READ ) && read2idle ) ? IDLE :
|
||||
state_c ;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//Address generation for read and write operations
|
||||
//The address to be used for updating in the next
|
||||
//27 clock cycles in the read-write state
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
wire second_falling;
|
||||
wire second_falling_w = (state_c == WRITE);
|
||||
sirv_gnrl_dfflr #(1) second_falling_dfflr (end_cnt ,second_falling_w, second_falling, clk, rst_n);
|
||||
|
||||
wire addr_update = ((state_c == READ) | ((state_c == WRITE) & second_falling)) & add_cnt & (cnt_c == 5'd27);
|
||||
wire [24:0] addr_c;
|
||||
|
||||
wire [24:0] addr_n = ilde2recvcmd ? 25'd0 :
|
||||
initaddr_vld_r[1] ? initaddr :
|
||||
addr_update ? addr_c + 25'd4 :
|
||||
addr_c ;
|
||||
|
||||
sirv_gnrl_dffr #(25) addr_c_dffr (addr_n, addr_c, clk, rst_n);
|
||||
|
||||
assign addr = addr_c;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//Write data and write signals generation
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
wire wren_r;
|
||||
|
||||
wire wren_w = (state_c == WRITE) & add_cnt & (cnt_c == 5'd31);
|
||||
//wdata
|
||||
sirv_gnrl_dfflr #(32) wrdata_dfflr (wren_r, spi_din[31:0], wrdata, clk, rst_n);
|
||||
//wren_r
|
||||
|
||||
sirv_gnrl_dffr #(1) wren_r_dffr (wren_w, wren_r, clk, rst_n);
|
||||
|
||||
//wren
|
||||
sirv_gnrl_dffr #(1) wren_dffr (wren_r, wren, clk, rst_n);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//read signals generation
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
wire rden_w = chipid_match & cmd & add_cnt & (cnt_c == 5'd28);
|
||||
sirv_gnrl_dffr #(1) rden_dffr (rden_w, rden, clk, rst_n);
|
||||
|
||||
//Read data register
|
||||
wire rddata_vld = cmd & add_cnt & (cnt_c == 5'd30);
|
||||
wire [31:0] rddata_reg;
|
||||
sirv_gnrl_dfflr #(32) rddata_reg_dfflr (rddata_vld, rddata[31:0], rddata_reg, clk, rst_n);
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//SPI send data update
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
wire [31:0] spi_dout ;
|
||||
wire update_flag = cmd & add_cnt & (cnt_c == 5'd31);
|
||||
|
||||
wire [31:0] rddata_sr = update_flag ? rddata_reg[31:0] :
|
||||
((state_c == READ) & add_cnt) ? {spi_dout[30:0],1'b0} : //M 2024-06-24
|
||||
spi_dout ;
|
||||
|
||||
sirv_gnrl_dffr #(32) spi_dout_dffr (rddata_sr, spi_dout, clk, rst_n);
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//SPI send data
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
assign miso = spi_dout[31];
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//SPI output enable
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
sirv_gnrl_dffrs #(1) oen_dffr (~(state_c == READ), oen, clk, rst_n);
|
||||
|
||||
endmodule
|
||||
|
||||
|
||||
|
|
@ -1,342 +1,342 @@
|
|||
/*
|
||||
Copyright 2018-2020 Nuclei System Technology, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// Designer : Bob Hu
|
||||
//
|
||||
// Description:
|
||||
// All of the general DFF and Latch modules
|
||||
//
|
||||
// ====================================================================
|
||||
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Load-enable and Reset
|
||||
// Default reset value is 1
|
||||
//
|
||||
// ===========================================================================
|
||||
`define DISABLE_SV_ASSERTION
|
||||
`define dly #0.2
|
||||
module sirv_gnrl_dfflrs # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
input lden,
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk,
|
||||
input rst_n
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk or negedge rst_n)
|
||||
begin : DFFLRS_PROC
|
||||
if (rst_n == 1'b0)
|
||||
qout_r <= {DW{1'b1}};
|
||||
else if (lden == 1'b1)
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
`ifndef FPGA_SOURCE//{
|
||||
`ifndef DISABLE_SV_ASSERTION//{
|
||||
//synopsys translate_off
|
||||
sirv_gnrl_xchecker # (
|
||||
.DW(1)
|
||||
) sirv_gnrl_xchecker(
|
||||
.i_dat(lden),
|
||||
.clk (clk)
|
||||
);
|
||||
//synopsys translate_on
|
||||
`endif//}
|
||||
`endif//}
|
||||
|
||||
|
||||
endmodule
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Load-enable and Reset
|
||||
// Default reset value is 0
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_dfflr # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
input lden,
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk,
|
||||
input rst_n
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk or negedge rst_n)
|
||||
begin : DFFLR_PROC
|
||||
if (rst_n == 1'b0)
|
||||
qout_r <= {DW{1'b0}};
|
||||
else if (lden == 1'b1)
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
`ifndef FPGA_SOURCE//{
|
||||
`ifndef DISABLE_SV_ASSERTION//{
|
||||
//synopsys translate_off
|
||||
sirv_gnrl_xchecker # (
|
||||
.DW(1)
|
||||
) sirv_gnrl_xchecker(
|
||||
.i_dat(lden),
|
||||
.clk (clk)
|
||||
);
|
||||
//synopsys translate_on
|
||||
`endif//}
|
||||
`endif//}
|
||||
|
||||
|
||||
endmodule
|
||||
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Load-enable and Reset
|
||||
// Default reset value is input
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_dfflrd # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
input [DW-1:0] init,
|
||||
input lden,
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk,
|
||||
input rst_n
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk or negedge rst_n)
|
||||
begin : DFFLR_PROC
|
||||
if (rst_n == 1'b0)
|
||||
qout_r <= init;
|
||||
else if (lden == 1'b1)
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
`ifndef FPGA_SOURCE//{
|
||||
`ifndef DISABLE_SV_ASSERTION//{
|
||||
//synopsys translate_off
|
||||
sirv_gnrl_xchecker # (
|
||||
.DW(1)
|
||||
) sirv_gnrl_xchecker(
|
||||
.i_dat(lden),
|
||||
.clk (clk)
|
||||
);
|
||||
//synopsys translate_on
|
||||
`endif//}
|
||||
`endif//}
|
||||
|
||||
|
||||
endmodule
|
||||
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Load-enable, no reset
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_dffl # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
input lden,
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk)
|
||||
begin : DFFL_PROC
|
||||
if (lden == 1'b1)
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
`ifndef FPGA_SOURCE//{
|
||||
`ifndef DISABLE_SV_ASSERTION//{
|
||||
//synopsys translate_off
|
||||
sirv_gnrl_xchecker # (
|
||||
.DW(1)
|
||||
) sirv_gnrl_xchecker(
|
||||
.i_dat(lden),
|
||||
.clk (clk)
|
||||
);
|
||||
//synopsys translate_on
|
||||
`endif//}
|
||||
`endif//}
|
||||
|
||||
|
||||
endmodule
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Reset, no load-enable
|
||||
// Default reset value is 1
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_dffrs # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk,
|
||||
input rst_n
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk or negedge rst_n)
|
||||
begin : DFFRS_PROC
|
||||
if (rst_n == 1'b0)
|
||||
qout_r <= {DW{1'b1}};
|
||||
else
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
endmodule
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Reset, no load-enable
|
||||
// Default reset value is 0
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_dffr # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk,
|
||||
input rst_n
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk or negedge rst_n)
|
||||
begin : DFFR_PROC
|
||||
if (rst_n == 1'b0)
|
||||
qout_r <= {DW{1'b0}};
|
||||
else
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
endmodule
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module for general latch
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_ltch # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
//input test_mode,
|
||||
input lden,
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @ *
|
||||
begin : LTCH_PROC
|
||||
if (lden == 1'b1)
|
||||
qout_r <= dnxt;
|
||||
end
|
||||
|
||||
//assign qout = test_mode ? dnxt : qout_r;
|
||||
assign qout = qout_r;
|
||||
|
||||
`ifndef FPGA_SOURCE//{
|
||||
`ifndef DISABLE_SV_ASSERTION//{
|
||||
//synopsys translate_off
|
||||
always_comb
|
||||
begin
|
||||
CHECK_THE_X_VALUE:
|
||||
assert (lden !== 1'bx)
|
||||
else $fatal ("\n Error: Oops, detected a X value!!! This should never happen. \n");
|
||||
end
|
||||
|
||||
//synopsys translate_on
|
||||
`endif//}
|
||||
`endif//}
|
||||
|
||||
|
||||
endmodule
|
||||
|
||||
// module sirv_gnrl_edffr #(parameter type T = logic) (
|
||||
// input T dnxt,
|
||||
// output T qout,
|
||||
// input clk, rst_n
|
||||
// );
|
||||
|
||||
// T qout_r;
|
||||
|
||||
// always_ff @(posedge clk or negedge rst_n) begin
|
||||
// if (!rst_n) qout_r <= T'('0);
|
||||
// else qout_r <= `dly dnxt;
|
||||
// end
|
||||
// assign qout = qout_r;
|
||||
// endmodule
|
||||
|
||||
/*
|
||||
Copyright 2018-2020 Nuclei System Technology, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// Designer : Bob Hu
|
||||
//
|
||||
// Description:
|
||||
// All of the general DFF and Latch modules
|
||||
//
|
||||
// ====================================================================
|
||||
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Load-enable and Reset
|
||||
// Default reset value is 1
|
||||
//
|
||||
// ===========================================================================
|
||||
`define DISABLE_SV_ASSERTION
|
||||
`define dly #0.2
|
||||
module sirv_gnrl_dfflrs # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
input lden,
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk,
|
||||
input rst_n
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk or negedge rst_n)
|
||||
begin : DFFLRS_PROC
|
||||
if (rst_n == 1'b0)
|
||||
qout_r <= {DW{1'b1}};
|
||||
else if (lden == 1'b1)
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
`ifndef FPGA_SOURCE//{
|
||||
`ifndef DISABLE_SV_ASSERTION//{
|
||||
//synopsys translate_off
|
||||
sirv_gnrl_xchecker # (
|
||||
.DW(1)
|
||||
) sirv_gnrl_xchecker(
|
||||
.i_dat(lden),
|
||||
.clk (clk)
|
||||
);
|
||||
//synopsys translate_on
|
||||
`endif//}
|
||||
`endif//}
|
||||
|
||||
|
||||
endmodule
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Load-enable and Reset
|
||||
// Default reset value is 0
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_dfflr # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
input lden,
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk,
|
||||
input rst_n
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk or negedge rst_n)
|
||||
begin : DFFLR_PROC
|
||||
if (rst_n == 1'b0)
|
||||
qout_r <= {DW{1'b0}};
|
||||
else if (lden == 1'b1)
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
`ifndef FPGA_SOURCE//{
|
||||
`ifndef DISABLE_SV_ASSERTION//{
|
||||
//synopsys translate_off
|
||||
sirv_gnrl_xchecker # (
|
||||
.DW(1)
|
||||
) sirv_gnrl_xchecker(
|
||||
.i_dat(lden),
|
||||
.clk (clk)
|
||||
);
|
||||
//synopsys translate_on
|
||||
`endif//}
|
||||
`endif//}
|
||||
|
||||
|
||||
endmodule
|
||||
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Load-enable and Reset
|
||||
// Default reset value is input
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_dfflrd # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
input [DW-1:0] init,
|
||||
input lden,
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk,
|
||||
input rst_n
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk or negedge rst_n)
|
||||
begin : DFFLR_PROC
|
||||
if (rst_n == 1'b0)
|
||||
qout_r <= init;
|
||||
else if (lden == 1'b1)
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
`ifndef FPGA_SOURCE//{
|
||||
`ifndef DISABLE_SV_ASSERTION//{
|
||||
//synopsys translate_off
|
||||
sirv_gnrl_xchecker # (
|
||||
.DW(1)
|
||||
) sirv_gnrl_xchecker(
|
||||
.i_dat(lden),
|
||||
.clk (clk)
|
||||
);
|
||||
//synopsys translate_on
|
||||
`endif//}
|
||||
`endif//}
|
||||
|
||||
|
||||
endmodule
|
||||
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Load-enable, no reset
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_dffl # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
input lden,
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk)
|
||||
begin : DFFL_PROC
|
||||
if (lden == 1'b1)
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
`ifndef FPGA_SOURCE//{
|
||||
`ifndef DISABLE_SV_ASSERTION//{
|
||||
//synopsys translate_off
|
||||
sirv_gnrl_xchecker # (
|
||||
.DW(1)
|
||||
) sirv_gnrl_xchecker(
|
||||
.i_dat(lden),
|
||||
.clk (clk)
|
||||
);
|
||||
//synopsys translate_on
|
||||
`endif//}
|
||||
`endif//}
|
||||
|
||||
|
||||
endmodule
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Reset, no load-enable
|
||||
// Default reset value is 1
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_dffrs # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk,
|
||||
input rst_n
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk or negedge rst_n)
|
||||
begin : DFFRS_PROC
|
||||
if (rst_n == 1'b0)
|
||||
qout_r <= {DW{1'b1}};
|
||||
else
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
endmodule
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module sirv_gnrl DFF with Reset, no load-enable
|
||||
// Default reset value is 0
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_dffr # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout,
|
||||
|
||||
input clk,
|
||||
input rst_n
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @(posedge clk or negedge rst_n)
|
||||
begin : DFFR_PROC
|
||||
if (rst_n == 1'b0)
|
||||
qout_r <= {DW{1'b0}};
|
||||
else
|
||||
qout_r <= `dly dnxt;
|
||||
end
|
||||
|
||||
assign qout = qout_r;
|
||||
|
||||
endmodule
|
||||
// ===========================================================================
|
||||
//
|
||||
// Description:
|
||||
// Verilog module for general latch
|
||||
//
|
||||
// ===========================================================================
|
||||
|
||||
module sirv_gnrl_ltch # (
|
||||
parameter DW = 32
|
||||
) (
|
||||
|
||||
//input test_mode,
|
||||
input lden,
|
||||
input [DW-1:0] dnxt,
|
||||
output [DW-1:0] qout
|
||||
);
|
||||
|
||||
reg [DW-1:0] qout_r;
|
||||
|
||||
always @ *
|
||||
begin : LTCH_PROC
|
||||
if (lden == 1'b1)
|
||||
qout_r <= dnxt;
|
||||
end
|
||||
|
||||
//assign qout = test_mode ? dnxt : qout_r;
|
||||
assign qout = qout_r;
|
||||
|
||||
`ifndef FPGA_SOURCE//{
|
||||
`ifndef DISABLE_SV_ASSERTION//{
|
||||
//synopsys translate_off
|
||||
always_comb
|
||||
begin
|
||||
CHECK_THE_X_VALUE:
|
||||
assert (lden !== 1'bx)
|
||||
else $fatal ("\n Error: Oops, detected a X value!!! This should never happen. \n");
|
||||
end
|
||||
|
||||
//synopsys translate_on
|
||||
`endif//}
|
||||
`endif//}
|
||||
|
||||
|
||||
endmodule
|
||||
|
||||
// module sirv_gnrl_edffr #(parameter type T = logic) (
|
||||
// input T dnxt,
|
||||
// output T qout,
|
||||
// input clk, rst_n
|
||||
// );
|
||||
|
||||
// T qout_r;
|
||||
|
||||
// always_ff @(posedge clk or negedge rst_n) begin
|
||||
// if (!rst_n) qout_r <= T'('0);
|
||||
// else qout_r <= `dly dnxt;
|
||||
// end
|
||||
// assign qout = qout_r;
|
||||
// endmodule
|
||||
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
//+FHDR--------------------------------------------------------------------------------------------------------
|
||||
// Add a new register:
|
||||
|
||||
// SECTION A: Add localparam ADDR_NEW = 16'hXX;.
|
||||
|
||||
// SECTION B: Declare wire sel_new, we_new, [31:0] reg_new;.
|
||||
|
||||
// SECTION C: Add decoding logic: assign sel_new = (reg_idx == ADDR_NEW >> 2);.
|
||||
|
||||
// SECTION D: Instantiate the underlying library, e.g., sirv_gnrl_dfflr #(32) new_dff (we_new, wrdata, reg_new, clk, rst_n);.
|
||||
|
||||
// SECTION F: Add else if (sel_new) rddata_reg = reg_new; in the always block.
|
||||
|
||||
// SECTION G: Map reg_new to the module's output ports.
|
||||
//-FHDR--------------------------------------------------------------------------------------------------------
|
||||
|
||||
module system_regfile (
|
||||
// [BLOCK 0] System and Bus Interface
|
||||
input clk,
|
||||
input rst_n,
|
||||
input [31:0] wrdata,
|
||||
input wren,
|
||||
input [24:0] rwaddr,
|
||||
input rden,
|
||||
output [31:0] rddata,
|
||||
|
||||
output [23:0]win_us,
|
||||
input [23:0]pulse_cnt_out,
|
||||
input pules_cnt_vld
|
||||
|
||||
);
|
||||
|
||||
// =============================================================================
|
||||
// [SECTION A] Address Offset Definition (Localparams)
|
||||
// =============================================================================
|
||||
localparam TESTR = 16'h00, DATER = 16'h04;
|
||||
localparam WIN_TIME_R =16'h08 ;
|
||||
localparam RESULT_R =16'h0c ;
|
||||
|
||||
|
||||
// =============================================================================
|
||||
// [SECTION B] Internal Wire Declaration (Wires)
|
||||
// =============================================================================
|
||||
|
||||
// Register selection signals (Enable Wires)
|
||||
wire sel_testr, sel_dater;
|
||||
wire sel_win_time, sel_result;
|
||||
|
||||
// Write enable signals (Write Enable Wires)
|
||||
wire we_testr, we_dater;
|
||||
wire we_win_time;
|
||||
|
||||
|
||||
// Register storage wires (Storage Wires)
|
||||
wire [31:0] testr, dater;
|
||||
wire [23:0] win_time_r, result_r;
|
||||
// =============================================================================
|
||||
// [SECTION C] Decoding Logic (Decoding)
|
||||
// =============================================================================
|
||||
assign sel_testr = (rwaddr[15:0] == TESTR );
|
||||
assign sel_dater = (rwaddr[15:0] == DATER );
|
||||
assign sel_win_time = (rwaddr[15:0] == WIN_TIME_R );
|
||||
assign sel_result = (rwaddr[15:0] == RESULT_R );
|
||||
|
||||
// Write enable allocation
|
||||
assign we_testr = sel_testr & wren;
|
||||
assign we_dater = sel_dater & wren;
|
||||
assign we_win_time = sel_win_time & wren;
|
||||
|
||||
|
||||
// =============================================================================
|
||||
// [SECTION D] Register Instantiation (Storage Implementation)
|
||||
// =============================================================================
|
||||
|
||||
// --- General and Test Registers ---
|
||||
sirv_gnrl_dfflrd #(32) testr_dff (32'h01234567, we_testr, wrdata[31:0], testr, clk, rst_n);
|
||||
sirv_gnrl_dfflrd #(32) sfrtr_dff (32'h20260406, we_dater, wrdata[31:0], dater, clk, rst_n);
|
||||
|
||||
// --- Thermometer Functional Registers ---
|
||||
sirv_gnrl_dfflrd #(24) win_time_dff (32'h00_03E8, we_win_time, wrdata, win_time_r, clk, rst_n);
|
||||
|
||||
sirv_gnrl_dfflr #(24) result_dff (pules_cnt_vld,pulse_cnt_out,result_r, clk, rst_n);
|
||||
|
||||
// =============================================================================
|
||||
// [SECTION E] Special Business Logic (Business Logic)
|
||||
// =============================================================================
|
||||
|
||||
// LVDS Real-time status register
|
||||
// sirv_gnrl_dffr #(8) lvdssr_inst ({link_down, train_ready, crc_error_r, phase_adj_req_r, phase_tap[2:0], prefilling}, lvdssr, clk, rst_n);
|
||||
|
||||
// =============================================================================
|
||||
// [SECTION F] Readback Logic (Readback Mux)
|
||||
// =============================================================================
|
||||
reg [31:0] rddata_reg;
|
||||
always @(*) begin
|
||||
rddata_reg = 32'b0;
|
||||
if (sel_testr) rddata_reg = testr;
|
||||
else if (sel_dater) rddata_reg = dater;
|
||||
else if (sel_win_time) rddata_reg = {8'b0,win_time_r};
|
||||
else if (sel_result) rddata_reg = {8'b0,result_r};
|
||||
end
|
||||
|
||||
sirv_gnrl_dfflr #(32) rddata_out_dff (rden, rddata_reg, rddata, clk, rst_n);
|
||||
|
||||
// =============================================================================
|
||||
// [SECTION G] Output Mapping (Output Assignments)
|
||||
// =============================================================================
|
||||
assign win_us = win_time_r;
|
||||
|
||||
|
||||
endmodule
|
||||
|
|
@ -18,10 +18,10 @@ module TB();
|
|||
// Clock Generation
|
||||
initial clk = 0;
|
||||
always #(CLK_PERIOD/2) clk = ~clk;
|
||||
initial begin
|
||||
$fsdbDumpfile("wave.fsdb");
|
||||
$fsdbDumpvars();
|
||||
end
|
||||
// initial begin
|
||||
// $fsdbDumpfile("wave.fsdb");
|
||||
// $fsdbDumpvars();
|
||||
// end
|
||||
// ==========================================
|
||||
// DUT Instantiation
|
||||
// ==========================================
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_131020_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_131039_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_131040_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_14790_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_14816_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_26119_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_30584_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_30603_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_34047_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_34065_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_37423_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_37441_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_39101_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_39120_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_40330_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_40348_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_41475_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_41494_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_42301_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_42320_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_43406_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_43443_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_45855_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_45891_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_50099_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_50120_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_52045_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_52081_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_53444_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_53462_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_54606_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_54624_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_56094_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_56112_archive_1.so
|
||||
|
|
@ -0,0 +1 @@
|
|||
.//../simv.daidir//_57246_archive_1.so
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue