mirror of https://github.com/YosysHQ/yosys.git
Merge pull request #147 from azonenberg/master
Added GP_BANDGAP, GP_POR, GP_RINGOSC primitives
This commit is contained in:
commit
3d9ff912c2
|
@ -75,13 +75,44 @@ module GP_LFOSC(input PWRDN, output reg CLKOUT);
|
||||||
|
|
||||||
initial CLKOUT = 0;
|
initial CLKOUT = 0;
|
||||||
|
|
||||||
|
//auto powerdown not implemented for simulation
|
||||||
|
//output dividers not implemented for simulation
|
||||||
|
|
||||||
always begin
|
always begin
|
||||||
if(PWRDN)
|
if(PWRDN)
|
||||||
clkout = 0;
|
CLKOUT = 0;
|
||||||
else begin
|
else begin
|
||||||
//half period of 1730 Hz
|
//half period of 1730 Hz
|
||||||
#289017;
|
#289017;
|
||||||
clkout = ~clkout;
|
CLKOUT = ~CLKOUT;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module GP_RINGOSC(input PWRDN, output reg CLKOUT_PREDIV, output reg CLKOUT_FABRIC);
|
||||||
|
|
||||||
|
parameter PWRDN_EN = 0;
|
||||||
|
parameter AUTO_PWRDN = 0;
|
||||||
|
parameter PRE_DIV = 1;
|
||||||
|
parameter FABRIC_DIV = 1;
|
||||||
|
|
||||||
|
initial CLKOUT_PREDIV = 0;
|
||||||
|
initial CLKOUT_FABRIC = 0;
|
||||||
|
|
||||||
|
//output dividers not implemented for simulation
|
||||||
|
//auto powerdown not implemented for simulation
|
||||||
|
|
||||||
|
always begin
|
||||||
|
if(PWRDN) begin
|
||||||
|
CLKOUT_PREDIV = 0;
|
||||||
|
CLKOUT_FABRIC = 0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
//half period of 27 MHz
|
||||||
|
#18.518;
|
||||||
|
CLKOUT_PREDIV = ~CLKOUT_PREDIV;
|
||||||
|
CLKOUT_FABRIC = ~CLKOUT_FABRIC;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -144,3 +175,34 @@ module GP_SYSRESET(input RST);
|
||||||
//cannot simulate whole system reset
|
//cannot simulate whole system reset
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
module GP_BANDGAP(output reg OK, output reg VOUT);
|
||||||
|
parameter AUTO_PWRDN = 1;
|
||||||
|
parameter CHOPPER_EN = 1;
|
||||||
|
parameter OUT_DELAY = 100;
|
||||||
|
|
||||||
|
//cannot simulate mixed signal IP
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
|
module GP_POR(output reg RST_DONE);
|
||||||
|
parameter POR_TIME = 500;
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
RST_DONE = 0;
|
||||||
|
|
||||||
|
if(POR_TIME == 4)
|
||||||
|
#4000;
|
||||||
|
else if(POR_TIME == 500)
|
||||||
|
#500000;
|
||||||
|
else begin
|
||||||
|
$display("ERROR: bad POR_TIME for GP_POR cell");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
|
||||||
|
RST_DONE = 1;
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
|
@ -248,8 +248,12 @@ void greenpak4_counters_worker(
|
||||||
if (cell->type != "$alu")
|
if (cell->type != "$alu")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//A input is the count value. Check if it has COUNT_EXTRACT set
|
//A input is the count value. Check if it has COUNT_EXTRACT set.
|
||||||
RTLIL::Wire* a_wire = sigmap(cell->getPort("\\A")).as_wire();
|
//If it's not a wire, don't even try
|
||||||
|
auto port = sigmap(cell->getPort("\\A"));
|
||||||
|
if(!port.is_wire())
|
||||||
|
return;
|
||||||
|
RTLIL::Wire* a_wire = port.as_wire();
|
||||||
bool force_extract = false;
|
bool force_extract = false;
|
||||||
bool never_extract = false;
|
bool never_extract = false;
|
||||||
string count_reg_src = a_wire->attributes["\\src"].decode_string().c_str();
|
string count_reg_src = a_wire->attributes["\\src"].decode_string().c_str();
|
||||||
|
|
Loading…
Reference in New Issue