mirror of https://github.com/YosysHQ/yosys.git
start adding wfg model
This commit is contained in:
parent
41a86fdb2c
commit
4aaab8f395
|
@ -539,27 +539,6 @@ module NX_PLL_U(R, REF, FBK, OSC, VCO, LDFO, REFO, CLK_DIV1, CLK_DIV2, CLK_DIV3,
|
||||||
parameter use_pll = 1'b1;
|
parameter use_pll = 1'b1;
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
(* blackbox *)
|
|
||||||
module NX_WFG_U(R, SI, ZI, SO, ZO);
|
|
||||||
input R;
|
|
||||||
input SI;
|
|
||||||
output SO;
|
|
||||||
input ZI;
|
|
||||||
output ZO;
|
|
||||||
parameter delay = 0;
|
|
||||||
parameter delay_on = 1'b0;
|
|
||||||
parameter div_phase = 1'b0;
|
|
||||||
parameter div_ratio = 0;
|
|
||||||
parameter location = "";
|
|
||||||
parameter mode = 0;
|
|
||||||
parameter pattern = 16'b0000000000000000;
|
|
||||||
parameter pattern_end = 0;
|
|
||||||
parameter reset_on_cal_lock_n = 1'b0;
|
|
||||||
parameter reset_on_pll_lock_n = 1'b0;
|
|
||||||
parameter reset_on_pll_locka_n = 1'b0;
|
|
||||||
parameter wfg_edge = 1'b0;
|
|
||||||
endmodule
|
|
||||||
|
|
||||||
(* blackbox *)
|
(* blackbox *)
|
||||||
module NX_XCDC_U(CK1, CK2, ASRSTI, ADRSTI, ASRSTO, ADRSTO, BSRSTI, BDRSTI, BSRSTO, BDRSTO, CSRSTI, CDRSTI, CSRSTO, CDRSTO, DSRSTI, DDRSTI, DSRSTO, DDRSTO, BI, CI, CO
|
module NX_XCDC_U(CK1, CK2, ASRSTI, ADRSTI, ASRSTO, ADRSTO, BSRSTI, BDRSTI, BSRSTO, BDRSTO, CSRSTI, CDRSTI, CSRSTO, CDRSTO, DSRSTI, DDRSTI, DSRSTO, DDRSTO, BI, CI, CO
|
||||||
, AO, BO, AI, DI, DO);
|
, AO, BO, AI, DI, DO);
|
||||||
|
|
|
@ -142,7 +142,7 @@ module NX_RFB_U(WCK, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14
|
||||||
integer i;
|
integer i;
|
||||||
initial begin
|
initial begin
|
||||||
for (i = 0; i < MEM_SIZE; i = i + 1)
|
for (i = 0; i < MEM_SIZE; i = i + 1)
|
||||||
mem[i] = MEM_WIDTH'b0;
|
mem[i] = 36'b0;
|
||||||
end
|
end
|
||||||
|
|
||||||
wire [ADDR_WIDTH-1:0] WA = (mode==2) ? { WA6, WA5, WA4, WA3, WA2, WA1 } : { WA5, WA4, WA3, WA2, WA1 };
|
wire [ADDR_WIDTH-1:0] WA = (mode==2) ? { WA6, WA5, WA4, WA3, WA2, WA1 } : { WA5, WA4, WA3, WA2, WA1 };
|
||||||
|
@ -178,3 +178,50 @@ module NX_RFB_U(WCK, I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14
|
||||||
if (WE)
|
if (WE)
|
||||||
mem[WA] <= I[MEM_WIDTH-1:0];
|
mem[WA] <= I[MEM_WIDTH-1:0];
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
(* abc9_box, lib_whitebox *)
|
||||||
|
module NX_WFG_U(R, SI, ZI, SO, ZO);
|
||||||
|
input R;
|
||||||
|
input SI;
|
||||||
|
output SO;
|
||||||
|
input ZI;
|
||||||
|
output ZO;
|
||||||
|
parameter delay = 0;
|
||||||
|
parameter delay_on = 1'b0;
|
||||||
|
parameter div_phase = 1'b0;
|
||||||
|
parameter div_ratio = 0;
|
||||||
|
parameter location = "";
|
||||||
|
parameter mode = 0;
|
||||||
|
parameter pattern = 16'b0000000000000000;
|
||||||
|
parameter pattern_end = 0;
|
||||||
|
parameter reset_on_cal_lock_n = 1'b0;
|
||||||
|
parameter reset_on_pll_lock_n = 1'b0;
|
||||||
|
parameter reset_on_pll_locka_n = 1'b0;
|
||||||
|
parameter wfg_edge = 1'b0;
|
||||||
|
|
||||||
|
generate
|
||||||
|
if (mode==0) begin
|
||||||
|
assign SO = SI;
|
||||||
|
end
|
||||||
|
else if (mode==1) begin
|
||||||
|
wire clock = ZI ^ wfg_edge;
|
||||||
|
wire reset = R || SI;
|
||||||
|
reg [3:0] counter = 0;
|
||||||
|
reg [15:0] rom = pattern;
|
||||||
|
|
||||||
|
always @(posedge clock)
|
||||||
|
begin
|
||||||
|
if (reset)
|
||||||
|
counter <= 4'b0;
|
||||||
|
else
|
||||||
|
counter <= counter + 1;
|
||||||
|
end
|
||||||
|
assign SO = counter == pattern_end;
|
||||||
|
assign ZO = rom[counter];
|
||||||
|
end
|
||||||
|
else if (mode==2) begin
|
||||||
|
end
|
||||||
|
else
|
||||||
|
$error("Unknown NX_WFG_U mode");
|
||||||
|
endgenerate
|
||||||
|
endmodule
|
||||||
|
|
Loading…
Reference in New Issue