OpenCores
URL https://opencores.org/ocsvn/versatile_library/versatile_library/trunk

Subversion Repositories versatile_library

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /versatile_library/trunk/rtl
    from Rev 94 to Rev 93
    Reverse comparison

Rev 94 → Rev 93

/verilog/versatile_library.v
63,10 → 63,6
`define SHREG_CE
`define DELAY
`define DELAY_EMPTYFLAG
`define PULSE2TOGGLE
`define TOGGLE2PULSE
`define SYNCHRONIZER
`define CDC
 
`define WB3AVALON_BRIDGE
`define WB3WB3_BRIDGE
95,18 → 91,6
`endif
`endif
 
`ifdef CDC
`ifndef PULSE2TOGGLE
`define PULSE2TOGGLE
`endif
`ifndef TOGGLE2PULSE
`define TOGGLE2PULSE
`endif
`ifndef SYNCHRONIZER
`define SYNCHRONIZER
`endif
`endif
 
`ifdef WB_B3_DPRAM
`ifndef WB_ADR_INC
`define WB_ADR_INC
1164,116 → 1148,58
endmodule
`endif
 
`ifdef PULSE2TOGGLE
`define MODULE pules2toggle
module `BASE`MODULE ( pl, q, clk, rst)
`ifdef ASYNC_REG_REQ_ACK
`define MODULE async_reg_req_ack
module `BASE`MODULE ( d, q, req_i, req_o, ack_i, ack_o, clk_a, rst_a, clk_b, rst_b);
`undef MODULE
input pl;
output q;
input clk, rst;
input
always @ (posedge clk or posedge rst)
parameter data_width = 8;
input [data_width-1:0] d;
output [data_width-1:0] q;
input req_i;
output req_o;
input ack_i;
output ack_o;
input clk_a, rst_a, clk_b, rst_b;
 
reg [3:0] reqi; // 3: last req in clk_a, 2: input dff, 1-0: sync
wire rst;
 
always @ (posedge clk_a or rst_a)
if (rst_a)
q <= {data_width{1'b0}};
else
if (req_i)
q <= d;
assign rst = ack_i | rst_a;
always @ (posedge clk_a or posedge rst)
if (rst)
q <= 1'b0;
req[2] <= 1'b0;
else
q <= pl ^ q;
endmodule
`endif
req[2] <= req_i & !ack_o;
 
`ifdef TOGGLE2PULSE
`define MODULE toggle2pulse;
module `BASE`MODULE (d, pl, clk, rst);
input d;
output pl;
input clk, rst;
reg dff;
always @ (posedge clk or posedge rst)
if (rst)
dff <= 1'b0;
always @ (posedge clk_a or posedge rst_a)
if (rst_a)
req[3] <= 1'b0;
else
dff <= d;
assign d ^ dff;
endmodule
`endif
req[3] <= req[2];
 
`ifdef SYNCHRONIZER
`define MODULE synchronizer
module `BASE`MODULE (d, q, clk, rst);
`undef MODULE
input d;
output reg q;
output clk, rst;
reg dff;
always @ (posedge clk or posedge rst)
if (rst)
{dff,q} <= 2'b00;
always @ (posedge clk_b or posedge rst_b)
if (rst_b)
req[1:0] <= 2'b00;
else
{dff,q} <= {d,dff};
endmodule
`endif
if (ack_i)
req[1:0] <= 2'b00;
else
req[1:0] <= req[2:1];
assign req_o = req[0];
 
`ifdef CDC
`define MODULE cdc
module `BASE`MODULE ( start_pl, take_it_pl, take_it_grant_pl, got_it_pl, clk_src, rst_src, clk_dst, rst_dst)
`undef MODULE
input start_pl;
output take_it_pl;
input take_it_grant_pl; // note: connect to take_it_pl to generate automatic ack
output got_it_pl;
input clk_src, rst_src;
input clk_dst, rst_dst;
wire take_it_tg, take_it_tg_sync;
wire got_it_tg, got_it_tg_sync;
// src -> dst
`define MODULE pulse2toggle
`BASE`MODULE p2t0 (
`undef MODULE
.pl(start_pl),
.q(take_it_tg),
.clk(clk_src),
.rst(rst_src));
always @ (posedge clk_a or posedge rst_a)
if (rst_a)
ack_o <= 1'b0;
else
ack_o <= req[3] & req[2];
 
`define MODULE synchronizer
`BASE`MODULE sync0 (
`undef MODULE
.d(take_it_tg),
.q(take_it_tg_sync),
.clk(clk_dst),
.rst(rst_dst));
`define MODULE toggle2pulse
`BASE`MODULE t2p0 (
`undef MODULE
.d(take_it_sync),
.pl(take_it_pl),
.clk(clk_dst),
.rst(rst_dst));
 
// dst -> src
`define MODULE pulse2toggle
`BASE`MODULE p2t0 (
`undef MODULE
.pl(take_it_grant_pl),
.q(got_it_tg),
.clk(clk_dst),
.rst(rst_dst));
 
`define MODULE synchronizer
`BASE`MODULE sync1 (
`undef MODULE
.d(got_it_tg),
.q(got_it_tg_sync),
.clk(clk_src),
.rst(rst_src));
 
`define MODULE toggle2pulse
`BASE`MODULE t2p1 (
`undef MODULE
.d(take_it_grant_tg_sync),
.pl(got_it_pl),
.clk(clk_src),
.rst(rst_src));
 
endmodule
`endif
//////////////////////////////////////////////////////////////////////
5703,7 → 5629,6
 
endmodule
`endif
 
//////////////////////////////////////////////////////////////////////
//// ////
//// Arithmetic functions ////
/verilog/versatile_library_actel.v
394,82 → 394,6
assign q = dffs[depth];
assign emptyflag = !(|dffs);
endmodule
module vl_pules2toggle ( pl, q, clk, rst)
input pl;
output q;
input clk, rst;
input
always @ (posedge clk or posedge rst)
if (rst)
q <= 1'b0;
else
q <= pl ^ q;
endmodule
module vl_toggle2pulse; (d, pl, clk, rst);
input d;
output pl;
input clk, rst;
reg dff;
always @ (posedge clk or posedge rst)
if (rst)
dff <= 1'b0;
else
dff <= d;
assign d ^ dff;
endmodule
module vl_synchronizer (d, q, clk, rst);
input d;
output reg q;
output clk, rst;
reg dff;
always @ (posedge clk or posedge rst)
if (rst)
{dff,q} <= 2'b00;
else
{dff,q} <= {d,dff};
endmodule
module vl_cdc ( start_pl, take_it_pl, take_it_grant_pl, got_it_pl, clk_src, rst_src, clk_dst, rst_dst)
input start_pl;
output take_it_pl;
input take_it_grant_pl; // note: connect to take_it_pl to generate automatic ack
output got_it_pl;
input clk_src, rst_src;
input clk_dst, rst_dst;
wire take_it_tg, take_it_tg_sync;
wire got_it_tg, got_it_tg_sync;
// src -> dst
vl_pulse2toggle p2t0 (
.pl(start_pl),
.q(take_it_tg),
.clk(clk_src),
.rst(rst_src));
vl_synchronizer sync0 (
.d(take_it_tg),
.q(take_it_tg_sync),
.clk(clk_dst),
.rst(rst_dst));
vl_toggle2pulse t2p0 (
.d(take_it_sync),
.pl(take_it_pl),
.clk(clk_dst),
.rst(rst_dst));
// dst -> src
vl_pulse2toggle p2t0 (
.pl(take_it_grant_pl),
.q(got_it_tg),
.clk(clk_dst),
.rst(rst_dst));
vl_synchronizer sync1 (
.d(got_it_tg),
.q(got_it_tg_sync),
.clk(clk_src),
.rst(rst_src));
vl_toggle2pulse t2p1 (
.d(take_it_grant_tg_sync),
.pl(got_it_pl),
.clk(clk_src),
.rst(rst_src));
endmodule
//////////////////////////////////////////////////////////////////////
//// ////
//// Logic functions ////
/verilog/versatile_library_altera.v
502,82 → 502,6
assign q = dffs[depth];
assign emptyflag = !(|dffs);
endmodule
module vl_pules2toggle ( pl, q, clk, rst)
input pl;
output q;
input clk, rst;
input
always @ (posedge clk or posedge rst)
if (rst)
q <= 1'b0;
else
q <= pl ^ q;
endmodule
module vl_toggle2pulse; (d, pl, clk, rst);
input d;
output pl;
input clk, rst;
reg dff;
always @ (posedge clk or posedge rst)
if (rst)
dff <= 1'b0;
else
dff <= d;
assign d ^ dff;
endmodule
module vl_synchronizer (d, q, clk, rst);
input d;
output reg q;
output clk, rst;
reg dff;
always @ (posedge clk or posedge rst)
if (rst)
{dff,q} <= 2'b00;
else
{dff,q} <= {d,dff};
endmodule
module vl_cdc ( start_pl, take_it_pl, take_it_grant_pl, got_it_pl, clk_src, rst_src, clk_dst, rst_dst)
input start_pl;
output take_it_pl;
input take_it_grant_pl; // note: connect to take_it_pl to generate automatic ack
output got_it_pl;
input clk_src, rst_src;
input clk_dst, rst_dst;
wire take_it_tg, take_it_tg_sync;
wire got_it_tg, got_it_tg_sync;
// src -> dst
vl_pulse2toggle p2t0 (
.pl(start_pl),
.q(take_it_tg),
.clk(clk_src),
.rst(rst_src));
vl_synchronizer sync0 (
.d(take_it_tg),
.q(take_it_tg_sync),
.clk(clk_dst),
.rst(rst_dst));
vl_toggle2pulse t2p0 (
.d(take_it_sync),
.pl(take_it_pl),
.clk(clk_dst),
.rst(rst_dst));
// dst -> src
vl_pulse2toggle p2t0 (
.pl(take_it_grant_pl),
.q(got_it_tg),
.clk(clk_dst),
.rst(rst_dst));
vl_synchronizer sync1 (
.d(got_it_tg),
.q(got_it_tg_sync),
.clk(clk_src),
.rst(rst_src));
vl_toggle2pulse t2p1 (
.d(take_it_grant_tg_sync),
.pl(got_it_pl),
.clk(clk_src),
.rst(rst_src));
endmodule
//////////////////////////////////////////////////////////////////////
//// ////
//// Logic functions ////
/verilog/wb.v
164,9 → 164,6
// wishbone master side
wbm_dat_o, wbm_adr_o, wbm_sel_o, wbm_bte_o, wbm_cti_o, wbm_we_o, wbm_cyc_o, wbm_stb_o, wbm_dat_i, wbm_ack_i, wbm_clk, wbm_rst);
 
parameter style = "FIFO"; // valid: simple, FIFO
parameter addr_width = 4;
 
input [31:0] wbs_dat_i;
input [31:2] wbs_adr_i;
input [3:0] wbs_sel_i;
189,6 → 186,8
input wbm_ack_i;
input wbm_clk, wbm_rst;
 
parameter addr_width = 4;
 
// bte
parameter linear = 2'b00;
parameter wrap4 = 2'b01;
199,13 → 198,13
parameter incburst = 3'b010;
parameter endofburst = 3'b111;
 
localparam wbs_adr = 1'b0;
localparam wbs_data = 1'b1;
parameter wbs_adr = 1'b0;
parameter wbs_data = 1'b1;
 
localparam wbm_adr0 = 2'b00;
localparam wbm_adr1 = 2'b01;
localparam wbm_data = 2'b10;
localparam wbm_data_wait = 2'b11;
parameter wbm_adr0 = 2'b00;
parameter wbm_adr1 = 2'b01;
parameter wbm_data = 2'b10;
parameter wbm_data_wait = 2'b11;
 
reg [1:0] wbs_bte_reg;
reg wbs;
1135,4 → 1134,3
 
endmodule
`endif
 
/verilog/defines.v
63,10 → 63,6
`define SHREG_CE
`define DELAY
`define DELAY_EMPTYFLAG
`define PULSE2TOGGLE
`define TOGGLE2PULSE
`define SYNCHRONIZER
`define CDC
 
`define WB3AVALON_BRIDGE
`define WB3WB3_BRIDGE
95,18 → 91,6
`endif
`endif
 
`ifdef CDC
`ifndef PULSE2TOGGLE
`define PULSE2TOGGLE
`endif
`ifndef TOGGLE2PULSE
`define TOGGLE2PULSE
`endif
`ifndef SYNCHRONIZER
`define SYNCHRONIZER
`endif
`endif
 
`ifdef WB_B3_DPRAM
`ifndef WB_ADR_INC
`define WB_ADR_INC
/verilog/registers.v
475,115 → 475,57
endmodule
`endif
 
`ifdef PULSE2TOGGLE
`define MODULE pules2toggle
module `BASE`MODULE ( pl, q, clk, rst)
`ifdef ASYNC_REG_REQ_ACK
`define MODULE async_reg_req_ack
module `BASE`MODULE ( d, q, req_i, req_o, ack_i, ack_o, clk_a, rst_a, clk_b, rst_b);
`undef MODULE
input pl;
output q;
input clk, rst;
input
always @ (posedge clk or posedge rst)
parameter data_width = 8;
input [data_width-1:0] d;
output [data_width-1:0] q;
input req_i;
output req_o;
input ack_i;
output ack_o;
input clk_a, rst_a, clk_b, rst_b;
 
reg [3:0] reqi; // 3: last req in clk_a, 2: input dff, 1-0: sync
wire rst;
 
always @ (posedge clk_a or rst_a)
if (rst_a)
q <= {data_width{1'b0}};
else
if (req_i)
q <= d;
assign rst = ack_i | rst_a;
always @ (posedge clk_a or posedge rst)
if (rst)
q <= 1'b0;
req[2] <= 1'b0;
else
q <= pl ^ q;
endmodule
`endif
req[2] <= req_i & !ack_o;
 
`ifdef TOGGLE2PULSE
`define MODULE toggle2pulse;
module `BASE`MODULE (d, pl, clk, rst);
input d;
output pl;
input clk, rst;
reg dff;
always @ (posedge clk or posedge rst)
if (rst)
dff <= 1'b0;
always @ (posedge clk_a or posedge rst_a)
if (rst_a)
req[3] <= 1'b0;
else
dff <= d;
assign d ^ dff;
endmodule
`endif
req[3] <= req[2];
 
`ifdef SYNCHRONIZER
`define MODULE synchronizer
module `BASE`MODULE (d, q, clk, rst);
`undef MODULE
input d;
output reg q;
output clk, rst;
reg dff;
always @ (posedge clk or posedge rst)
if (rst)
{dff,q} <= 2'b00;
always @ (posedge clk_b or posedge rst_b)
if (rst_b)
req[1:0] <= 2'b00;
else
{dff,q} <= {d,dff};
endmodule
`endif
if (ack_i)
req[1:0] <= 2'b00;
else
req[1:0] <= req[2:1];
assign req_o = req[0];
 
`ifdef CDC
`define MODULE cdc
module `BASE`MODULE ( start_pl, take_it_pl, take_it_grant_pl, got_it_pl, clk_src, rst_src, clk_dst, rst_dst)
`undef MODULE
input start_pl;
output take_it_pl;
input take_it_grant_pl; // note: connect to take_it_pl to generate automatic ack
output got_it_pl;
input clk_src, rst_src;
input clk_dst, rst_dst;
wire take_it_tg, take_it_tg_sync;
wire got_it_tg, got_it_tg_sync;
// src -> dst
`define MODULE pulse2toggle
`BASE`MODULE p2t0 (
`undef MODULE
.pl(start_pl),
.q(take_it_tg),
.clk(clk_src),
.rst(rst_src));
always @ (posedge clk_a or posedge rst_a)
if (rst_a)
ack_o <= 1'b0;
else
ack_o <= req[3] & req[2];
 
`define MODULE synchronizer
`BASE`MODULE sync0 (
`undef MODULE
.d(take_it_tg),
.q(take_it_tg_sync),
.clk(clk_dst),
.rst(rst_dst));
`define MODULE toggle2pulse
`BASE`MODULE t2p0 (
`undef MODULE
.d(take_it_sync),
.pl(take_it_pl),
.clk(clk_dst),
.rst(rst_dst));
 
// dst -> src
`define MODULE pulse2toggle
`BASE`MODULE p2t0 (
`undef MODULE
.pl(take_it_grant_pl),
.q(got_it_tg),
.clk(clk_dst),
.rst(rst_dst));
 
`define MODULE synchronizer
`BASE`MODULE sync1 (
`undef MODULE
.d(got_it_tg),
.q(got_it_tg_sync),
.clk(clk_src),
.rst(rst_src));
 
`define MODULE toggle2pulse
`BASE`MODULE t2p1 (
`undef MODULE
.d(take_it_grant_tg_sync),
.pl(got_it_pl),
.clk(clk_src),
.rst(rst_src));
 
endmodule
`endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.