mirror of https://github.com/YosysHQ/yosys.git
Generate TRELLIS_DPR16X4 for lutram
This commit is contained in:
parent
6e12da3956
commit
6e4c1675e7
|
@ -200,6 +200,50 @@ module DCMA (
|
||||||
);
|
);
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
(* abc9_box, lib_whitebox *)
|
||||||
|
module TRELLIS_DPR16X4 (
|
||||||
|
input [3:0] DI,
|
||||||
|
input [3:0] WAD,
|
||||||
|
input WRE,
|
||||||
|
input WCK,
|
||||||
|
input [3:0] RAD,
|
||||||
|
output [3:0] DO
|
||||||
|
);
|
||||||
|
parameter WCKMUX = "WCK";
|
||||||
|
parameter WREMUX = "WRE";
|
||||||
|
parameter [63:0] INITVAL = 64'h0000000000000000;
|
||||||
|
|
||||||
|
reg [3:0] mem[15:0];
|
||||||
|
|
||||||
|
integer i;
|
||||||
|
initial begin
|
||||||
|
for (i = 0; i < 16; i = i + 1)
|
||||||
|
mem[i] <= INITVAL[4*i +: 4];
|
||||||
|
end
|
||||||
|
|
||||||
|
wire muxwck = (WCKMUX == "INV") ? ~WCK : WCK;
|
||||||
|
|
||||||
|
reg muxwre;
|
||||||
|
always @(*)
|
||||||
|
case (WREMUX)
|
||||||
|
"1": muxwre = 1'b1;
|
||||||
|
"0": muxwre = 1'b0;
|
||||||
|
"INV": muxwre = ~WRE;
|
||||||
|
default: muxwre = WRE;
|
||||||
|
endcase
|
||||||
|
|
||||||
|
always @(posedge muxwck)
|
||||||
|
if (muxwre)
|
||||||
|
mem[WAD] <= DI;
|
||||||
|
|
||||||
|
assign DO = mem[RAD];
|
||||||
|
|
||||||
|
specify
|
||||||
|
// TODO
|
||||||
|
(RAD *> DO) = 0;
|
||||||
|
endspecify
|
||||||
|
endmodule
|
||||||
|
|
||||||
(* abc9_box, lib_whitebox *)
|
(* abc9_box, lib_whitebox *)
|
||||||
module DPR16X4C (
|
module DPR16X4C (
|
||||||
input [3:0] DI,
|
input [3:0] DI,
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
ram distributed $__DPR16X4C_ {
|
ram distributed $__TRELLIS_DPR16X4_ {
|
||||||
abits 4;
|
abits 4;
|
||||||
width 4;
|
width 4;
|
||||||
cost 4;
|
cost 4;
|
||||||
init no_undef;
|
init any;
|
||||||
prune_rom;
|
prune_rom;
|
||||||
port sw "W" {
|
port sw "W" {
|
||||||
clock posedge;
|
clock anyedge;
|
||||||
}
|
}
|
||||||
port ar "R" {
|
port ar "R" {
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,23 @@
|
||||||
module $__DPR16X4C_ (...);
|
module $__TRELLIS_DPR16X4_(...);
|
||||||
parameter INIT = 64'b0;
|
|
||||||
|
|
||||||
input PORT_W_CLK;
|
parameter INIT = 64'bx;
|
||||||
input [3:0] PORT_W_ADDR;
|
parameter PORT_W_CLK_POL = 1;
|
||||||
input [3:0] PORT_W_WR_DATA;
|
|
||||||
input PORT_W_WR_EN;
|
|
||||||
|
|
||||||
input [3:0] PORT_R_ADDR;
|
input PORT_W_CLK;
|
||||||
output [3:0] PORT_R_RD_DATA;
|
input [3:0] PORT_W_ADDR;
|
||||||
|
input [3:0] PORT_W_WR_DATA;
|
||||||
|
input PORT_W_WR_EN;
|
||||||
|
|
||||||
DPR16X4C #(
|
input [3:0] PORT_R_ADDR;
|
||||||
.INITVAL($sformatf("0x%08x", INIT))
|
output [3:0] PORT_R_RD_DATA;
|
||||||
) _TECHMAP_REPLACE_ (
|
|
||||||
|
localparam WCKMUX = PORT_W_CLK_POL ? "WCK" : "INV";
|
||||||
|
|
||||||
|
TRELLIS_DPR16X4 #(
|
||||||
|
.INITVAL(INIT),
|
||||||
|
.WCKMUX(WCKMUX),
|
||||||
|
.WREMUX("WRE")
|
||||||
|
) _TECHMAP_REPLACE_ (
|
||||||
.RAD(PORT_R_ADDR),
|
.RAD(PORT_R_ADDR),
|
||||||
.DO(PORT_R_RD_DATA),
|
.DO(PORT_R_RD_DATA),
|
||||||
|
|
||||||
|
@ -19,5 +25,6 @@ module $__DPR16X4C_ (...);
|
||||||
.DI(PORT_W_WR_DATA),
|
.DI(PORT_W_WR_DATA),
|
||||||
.WCK(PORT_W_CLK),
|
.WCK(PORT_W_CLK),
|
||||||
.WRE(PORT_W_WR_EN)
|
.WRE(PORT_W_WR_EN)
|
||||||
);
|
);
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
Loading…
Reference in New Issue