initial commit
This commit is contained in:
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
impl
|
||||||
|
src
|
||||||
|
|
||||||
|
*.vcd
|
||||||
|
*.log
|
||||||
|
cvcsim*
|
||||||
16
CON/io.cst
Normal file
16
CON/io.cst
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//Copyright (C)2014-2025 Gowin Semiconductor Corporation.
|
||||||
|
//All rights reserved.
|
||||||
|
//File Title: Physical Constraints file
|
||||||
|
//Tool Version: V1.9.12
|
||||||
|
//Part Number: GW1NSR-LV4CQN48PC7/I6
|
||||||
|
//Device: GW1NSR-4C
|
||||||
|
//Created Time: Wed 10 01 13:41:57 2025
|
||||||
|
|
||||||
|
IO_LOC "led" 10;
|
||||||
|
IO_PORT "led" IO_TYPE=LVCMOS33 PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
|
||||||
|
IO_LOC "button" 14;
|
||||||
|
IO_PORT "button" IO_TYPE=LVCMOS18 PULL_MODE=UP BANK_VCCIO=1.8;
|
||||||
|
IO_LOC "reset_n" 15;
|
||||||
|
IO_PORT "reset_n" IO_TYPE=LVCMOS18 PULL_MODE=UP BANK_VCCIO=1.8;
|
||||||
|
IO_LOC "clk" 45;
|
||||||
|
IO_PORT "clk" IO_TYPE=LVCMOS33 PULL_MODE=UP BANK_VCCIO=3.3;
|
||||||
6
CON/timing.sdc
Normal file
6
CON/timing.sdc
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
//Copyright (C)2014-2025 GOWIN Semiconductor Corporation.
|
||||||
|
//All rights reserved.
|
||||||
|
//File Title: Timing Constraints file
|
||||||
|
//Tool Version: V1.9.12
|
||||||
|
//Created Time: 2025-10-01 13:43:45
|
||||||
|
create_clock -name CLK_IN -period 37.037 -waveform {0 18.518} [get_ports {clk}]
|
||||||
20
HW/toplevel.v
Normal file
20
HW/toplevel.v
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
`timescale 1ns/1ps
|
||||||
|
|
||||||
|
module toplevel(
|
||||||
|
input wire clk,
|
||||||
|
input wire reset_n,
|
||||||
|
input wire button,
|
||||||
|
output wire led
|
||||||
|
);
|
||||||
|
reg led_v;
|
||||||
|
|
||||||
|
always @(posedge clk or negedge reset_n) begin
|
||||||
|
if (!reset_n) begin
|
||||||
|
led_v <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
led_v <= button;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assign led = led_v;
|
||||||
|
|
||||||
|
endmodule
|
||||||
25
IP/ge_pllvr/gw_pllvr.ipc
Normal file
25
IP/ge_pllvr/gw_pllvr.ipc
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
[General]
|
||||||
|
file=gw_pllvr
|
||||||
|
ipc_version=4
|
||||||
|
module=gw_pllvr
|
||||||
|
target_device=gw1nsr4c-009
|
||||||
|
type=clock_pllvr
|
||||||
|
version=1.0
|
||||||
|
|
||||||
|
[Config]
|
||||||
|
CKLOUTD3=false
|
||||||
|
CLKFB_SOURCE=0
|
||||||
|
CLKIN_FREQ=27
|
||||||
|
CLKOUTD=false
|
||||||
|
CLKOUTP=false
|
||||||
|
CLKOUT_BYPASS=false
|
||||||
|
CLKOUT_DIVIDE_DYN=true
|
||||||
|
CLKOUT_FREQ=120
|
||||||
|
CLKOUT_TOLERANCE=0
|
||||||
|
DYNAMIC=true
|
||||||
|
LANG=0
|
||||||
|
LOCK_EN=false
|
||||||
|
MODE_GENERAL=true
|
||||||
|
PLL_PWD=false
|
||||||
|
PLL_REGULATOR=false
|
||||||
|
RESET_PLL=true
|
||||||
34
IP/ge_pllvr/gw_pllvr.mod
Normal file
34
IP/ge_pllvr/gw_pllvr.mod
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
-series GW1NSR
|
||||||
|
-device GW1NSR-4C
|
||||||
|
-device_version
|
||||||
|
-package QFN48P
|
||||||
|
-part_number GW1NSR-LV4CQN48PC7/I6
|
||||||
|
|
||||||
|
|
||||||
|
-mod_name gw_pllvr
|
||||||
|
-file_name gw_pllvr
|
||||||
|
-path /data/joppe/projects/modem/IP/ge_pllvr/
|
||||||
|
-type PLL
|
||||||
|
-pllvr true
|
||||||
|
-file_type vlg
|
||||||
|
-dev_type GW1NSR-4C
|
||||||
|
-dyn_idiv_sel false
|
||||||
|
-idiv_sel 9
|
||||||
|
-dyn_fbdiv_sel false
|
||||||
|
-fbdiv_sel 40
|
||||||
|
-dyn_odiv_sel false
|
||||||
|
-odiv_sel 8
|
||||||
|
-dyn_da_en true
|
||||||
|
-rst_sig true
|
||||||
|
-rst_sig_p false
|
||||||
|
-pll_reg false
|
||||||
|
-fclkin 27
|
||||||
|
-clkfb_sel 0
|
||||||
|
-en_lock false
|
||||||
|
-clkout_bypass false
|
||||||
|
-clkout_ft_dir 1
|
||||||
|
-en_clkoutp false
|
||||||
|
-clkoutp_bypass false
|
||||||
|
-en_clkoutd false
|
||||||
|
-clkoutd_bypass false
|
||||||
|
-en_clkoutd3 false
|
||||||
67
IP/ge_pllvr/gw_pllvr.v
Normal file
67
IP/ge_pllvr/gw_pllvr.v
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
//Copyright (C)2014-2025 Gowin Semiconductor Corporation.
|
||||||
|
//All rights reserved.
|
||||||
|
//File Title: IP file
|
||||||
|
//Tool Version: V1.9.12
|
||||||
|
//Part Number: GW1NSR-LV4CQN48PC7/I6
|
||||||
|
//Device: GW1NSR-4C
|
||||||
|
//Created Time: Wed Oct 1 13:08:32 2025
|
||||||
|
|
||||||
|
module gw_pllvr (clkout, reset, clkin);
|
||||||
|
|
||||||
|
output clkout;
|
||||||
|
input reset;
|
||||||
|
input clkin;
|
||||||
|
|
||||||
|
wire lock_o;
|
||||||
|
wire clkoutp_o;
|
||||||
|
wire clkoutd_o;
|
||||||
|
wire clkoutd3_o;
|
||||||
|
wire gw_vcc;
|
||||||
|
wire gw_gnd;
|
||||||
|
|
||||||
|
assign gw_vcc = 1'b1;
|
||||||
|
assign gw_gnd = 1'b0;
|
||||||
|
|
||||||
|
PLLVR pllvr_inst (
|
||||||
|
.CLKOUT(clkout),
|
||||||
|
.LOCK(lock_o),
|
||||||
|
.CLKOUTP(clkoutp_o),
|
||||||
|
.CLKOUTD(clkoutd_o),
|
||||||
|
.CLKOUTD3(clkoutd3_o),
|
||||||
|
.RESET(reset),
|
||||||
|
.RESET_P(gw_gnd),
|
||||||
|
.CLKIN(clkin),
|
||||||
|
.CLKFB(gw_gnd),
|
||||||
|
.FBDSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
|
||||||
|
.IDSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
|
||||||
|
.ODSEL({gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
|
||||||
|
.PSDA({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
|
||||||
|
.DUTYDA({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
|
||||||
|
.FDLY({gw_gnd,gw_gnd,gw_gnd,gw_gnd}),
|
||||||
|
.VREN(gw_vcc)
|
||||||
|
);
|
||||||
|
|
||||||
|
defparam pllvr_inst.FCLKIN = "27";
|
||||||
|
defparam pllvr_inst.DYN_IDIV_SEL = "false";
|
||||||
|
defparam pllvr_inst.IDIV_SEL = 8;
|
||||||
|
defparam pllvr_inst.DYN_FBDIV_SEL = "false";
|
||||||
|
defparam pllvr_inst.FBDIV_SEL = 39;
|
||||||
|
defparam pllvr_inst.DYN_ODIV_SEL = "false";
|
||||||
|
defparam pllvr_inst.ODIV_SEL = 8;
|
||||||
|
defparam pllvr_inst.PSDA_SEL = "0000";
|
||||||
|
defparam pllvr_inst.DYN_DA_EN = "true";
|
||||||
|
defparam pllvr_inst.DUTYDA_SEL = "1000";
|
||||||
|
defparam pllvr_inst.CLKOUT_FT_DIR = 1'b1;
|
||||||
|
defparam pllvr_inst.CLKOUTP_FT_DIR = 1'b1;
|
||||||
|
defparam pllvr_inst.CLKOUT_DLY_STEP = 0;
|
||||||
|
defparam pllvr_inst.CLKOUTP_DLY_STEP = 0;
|
||||||
|
defparam pllvr_inst.CLKFB_SEL = "internal";
|
||||||
|
defparam pllvr_inst.CLKOUT_BYPASS = "false";
|
||||||
|
defparam pllvr_inst.CLKOUTP_BYPASS = "false";
|
||||||
|
defparam pllvr_inst.CLKOUTD_BYPASS = "false";
|
||||||
|
defparam pllvr_inst.DYN_SDIV_SEL = 2;
|
||||||
|
defparam pllvr_inst.CLKOUTD_SRC = "CLKOUT";
|
||||||
|
defparam pllvr_inst.CLKOUTD3_SRC = "CLKOUT";
|
||||||
|
defparam pllvr_inst.DEVICE = "GW1NSR-4C";
|
||||||
|
|
||||||
|
endmodule //gw_pllvr
|
||||||
18
IP/ge_pllvr/gw_pllvr_tmp.v
Normal file
18
IP/ge_pllvr/gw_pllvr_tmp.v
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
//Copyright (C)2014-2025 Gowin Semiconductor Corporation.
|
||||||
|
//All rights reserved.
|
||||||
|
//File Title: Template file for instantiation
|
||||||
|
//Tool Version: V1.9.12
|
||||||
|
//Part Number: GW1NSR-LV4CQN48PC7/I6
|
||||||
|
//Device: GW1NSR-4C
|
||||||
|
//Created Time: Wed Oct 1 13:08:32 2025
|
||||||
|
|
||||||
|
//Change the instance name and port connections to the signal names
|
||||||
|
//--------Copy here to design--------
|
||||||
|
|
||||||
|
gw_pllvr your_instance_name(
|
||||||
|
.clkout(clkout), //output clkout
|
||||||
|
.reset(reset), //input reset
|
||||||
|
.clkin(clkin) //input clkin
|
||||||
|
);
|
||||||
|
|
||||||
|
//--------Copy end-------------------
|
||||||
9
SIM/globals.v
Normal file
9
SIM/globals.v
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
`timescale 1ns/1ps
|
||||||
|
module glbl;
|
||||||
|
reg gsri = 0;
|
||||||
|
initial begin
|
||||||
|
#10 gsri = 1; // release reset after 100ns
|
||||||
|
end
|
||||||
|
|
||||||
|
GSR GSR (.GSRI(gsri));
|
||||||
|
endmodule
|
||||||
18141
SIM/prim_sim.v
Executable file
18141
SIM/prim_sim.v
Executable file
File diff suppressed because it is too large
Load Diff
129111
SIM/prim_tsim.v
Executable file
129111
SIM/prim_tsim.v
Executable file
File diff suppressed because it is too large
Load Diff
42
SIM/toplevel_tb.v
Normal file
42
SIM/toplevel_tb.v
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
`timescale 1ns/1ps
|
||||||
|
|
||||||
|
module toplevel_tb;
|
||||||
|
reg clk;
|
||||||
|
reg reset_n;
|
||||||
|
reg button;
|
||||||
|
wire led;
|
||||||
|
|
||||||
|
toplevel m_toplevel(
|
||||||
|
.clk(clk),
|
||||||
|
.reset_n(reset_n),
|
||||||
|
.button(button),
|
||||||
|
.led(led)
|
||||||
|
);
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
$dumpfile("toplevel_tb.vcd");
|
||||||
|
$dumpvars (0, toplevel_tb);
|
||||||
|
|
||||||
|
clk <= 1'b0;
|
||||||
|
reset_n <= 1'b0;
|
||||||
|
button <= 1'b0;
|
||||||
|
|
||||||
|
#50 reset_n <= 1'b1;
|
||||||
|
|
||||||
|
#70 button <= 1'b1;
|
||||||
|
|
||||||
|
#185 button <= 1'b0;
|
||||||
|
|
||||||
|
#200
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
|
||||||
|
always #37 clk = ~clk;
|
||||||
|
|
||||||
|
`ifdef TIMING_SIM
|
||||||
|
initial begin
|
||||||
|
$sdf_annotate("impl/pnr/modem.sdf", m_toplevel, , , "MAXIMUM");
|
||||||
|
end
|
||||||
|
`endif
|
||||||
|
|
||||||
|
endmodule
|
||||||
13
modem.gprj
Normal file
13
modem.gprj
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE gowin-fpga-project>
|
||||||
|
<Project>
|
||||||
|
<Template>FPGA</Template>
|
||||||
|
<Version>5</Version>
|
||||||
|
<Device name="GW1NSR-4C" pn="GW1NSR-LV4CQN48PC7/I6">gw1nsr4c-009</Device>
|
||||||
|
<FileList>
|
||||||
|
<File path="HW/toplevel.v" type="file.verilog" enable="1"/>
|
||||||
|
<File path="IP/ge_pllvr/gw_pllvr.v" type="file.verilog" enable="1"/>
|
||||||
|
<File path="CON/io.cst" type="file.cst" enable="1"/>
|
||||||
|
<File path="CON/timing.sdc" type="file.sdc" enable="1"/>
|
||||||
|
</FileList>
|
||||||
|
</Project>
|
||||||
27
modem.gprj.user
Normal file
27
modem.gprj.user
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE ProjectUserData>
|
||||||
|
<UserConfig>
|
||||||
|
<Version>1.0</Version>
|
||||||
|
<FlowState>
|
||||||
|
<Process ID="Synthesis" State="2"/>
|
||||||
|
<Process ID="Pnr" State="2"/>
|
||||||
|
<Process ID="Gao" State="2"/>
|
||||||
|
<Process ID="Rtl_Gao" State="2"/>
|
||||||
|
<Process ID="Gvio" State="0"/>
|
||||||
|
<Process ID="Place" State="2"/>
|
||||||
|
</FlowState>
|
||||||
|
<ResultFileList>
|
||||||
|
<ResultFile ResultFileType="RES.netlist" ResultFilePath="impl/gwsynthesis/modem.vg"/>
|
||||||
|
<ResultFile ResultFileType="RES.pnr.bitstream" ResultFilePath="impl/pnr/modem.fs"/>
|
||||||
|
<ResultFile ResultFileType="RES.pnr.pin.rpt" ResultFilePath="impl/pnr/modem.pin.html"/>
|
||||||
|
<ResultFile ResultFileType="RES.pnr.posp.bin" ResultFilePath="impl/pnr/modem.db"/>
|
||||||
|
<ResultFile ResultFileType="RES.pnr.pwr.rpt" ResultFilePath="impl/pnr/modem.power.html"/>
|
||||||
|
<ResultFile ResultFileType="RES.pnr.report" ResultFilePath="impl/pnr/modem.rpt.html"/>
|
||||||
|
<ResultFile ResultFileType="RES.pnr.timing.paths" ResultFilePath="impl/pnr/modem.timing_paths"/>
|
||||||
|
<ResultFile ResultFileType="RES.pnr.timing.rpt" ResultFilePath="impl/pnr/modem.tr.html"/>
|
||||||
|
<ResultFile ResultFileType="RES.syn.report" ResultFilePath="impl/gwsynthesis/modem_syn.rpt.html"/>
|
||||||
|
<ResultFile ResultFileType="RES.syn.resource" ResultFilePath="impl/gwsynthesis/modem_syn_rsc.xml"/>
|
||||||
|
</ResultFileList>
|
||||||
|
<Ui>000000ff00000001fd0000000200000000000001000000029ffc0200000001fc000000360000029f0000009501000018fa000000000200000003fb00000030004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00440065007300690067006e0100000000ffffffff0000006100fffffffb00000032004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00500072006f00630065007300730100000000ffffffff0000005d00fffffffb00000036004600700067006100500072006f006a006500630074002e00500061006e0065006c002e0048006900650072006100720063006800790100000000ffffffff0000007c00ffffff00000003000004f60000010afc0100000001fc00000000000004f6000000a100fffffffa000000000100000002fb00000032004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00470065006e006500720061006c0100000000ffffffff0000004c00fffffffb0000002e004600700067006100500072006f006a006500630074002e00500061006e0065006c002e004900730073007500650100000000ffffffff000000a100ffffff000003f00000029f00000004000000040000000800000008fc000000010000000200000004000000220043006f00720065002e0054006f006f006c006200610072002e00460069006c00650100000000ffffffff0000000000000000000000220043006f00720065002e0054006f006f006c006200610072002e004500640069007401000000a8ffffffff0000000000000000000000240043006f00720065002e0054006f006f006c006200610072002e0054006f006f006c00730100000174ffffffff0000000000000000000000280043006f00720065002e0054006f006f006c006200610072002e00500072006f0063006500730073010000024fffffffff0000000000000000</Ui>
|
||||||
|
<FpUi>312e30313131000000ff00000000fd000000020000000000000100000002befc0200000001fc00000039000002be0000008401000018fa000000010200000002fb0000001c0044006f0063006b00650072002e00530075006d006d0061007200790100000000ffffffff0000006b00fffffffb0000001c0044006f0063006b00650072002e004e00650074006c0069007300740100000000ffffffff0000005d00ffffff00000003000004f6000000fefc0100000001fc00000000000004f60000007b00fffffffa00000001010000000bfb0000001c0044006f0063006b00650072002e004d0065007300730061006700650100000000ffffffff0000005c00fffffffb0000002c0044006f0063006b00650072002e0049002f004f002e0043006f006e00730074007200610069006e007400730100000000ffffffff0000004a00fffffffb000000380044006f0063006b00650072002e005000720069006d00690074006900760065002e0043006f006e00730074007200610069006e007400730100000000ffffffff0000004a00fffffffb000000300044006f0063006b00650072002e00470072006f00750070002e0043006f006e00730074007200610069006e007400730100000000ffffffff0000004a00fffffffb000000360044006f0063006b00650072002e005200650073006f0075007200630065002e005200650073006500720076006100740069006f006e0100000000ffffffff0000004a00fffffffb000000380044006f0063006b00650072002e0043006c006f0063006b002e004e00650074002e0043006f006e00730074007200610069006e007400730100000000ffffffff0000004a00fffffffb000000420044006f0063006b00650072002e00470043004c004b002e005000720069006d00690074006900760065002e0043006f006e00730074007200610069006e007400730100000000ffffffff0000004a00fffffffb000000420044006f0063006b00650072002e00480043004c004b002e005000720069006d00690074006900760065002e0043006f006e00730074007200610069006e007400730100000000ffffffff0000004a00fffffffb000000440044006f0063006b00650072002e00470043004c004b0032002e005000720069006d00690074006900760065002e0043006f006e00730074007200610069006e007400730000000000ffffffff0000004a00fffffffb000000460044006f0063006b00650072002e00480043004c004b00350041002e005000720069006d00690074006900760065002e0043006f006e00730074007200610069006e007400730000000000ffffffff0000004a00fffffffb0000002e0044006f0063006b00650072002e0056007200650066002e0043006f006e00730074007200610069006e007400730100000000ffffffff0000004a00ffffff000003f0000002be00000004000000040000000800000008fc000000010000000200000001000000180054006f006f006c004200610072002e00460069006c00650100000000ffffffff0000000000000000</FpUi>
|
||||||
|
</UserConfig>
|
||||||
1
scripts/run_all.sh
Executable file
1
scripts/run_all.sh
Executable file
@@ -0,0 +1 @@
|
|||||||
|
gowin_sh scripts/run_all.tcl
|
||||||
2
scripts/run_all.tcl
Normal file
2
scripts/run_all.tcl
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
open_project modem.gprj
|
||||||
|
run all
|
||||||
13
scripts/run_postsim.sh
Executable file
13
scripts/run_postsim.sh
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
cvc \
|
||||||
|
+define+TIMING_SIM \
|
||||||
|
+acc \
|
||||||
|
+sdfverbose \
|
||||||
|
+show_canceled_e +suppress_warns+653+3102 \
|
||||||
|
-v SIM/prim_tsim.v \
|
||||||
|
impl/pnr/modem.vo \
|
||||||
|
SIM/toplevel_tb.v \
|
||||||
|
SIM/globals.v \
|
||||||
|
+sdf_annotate+impl/pnr/modem.sdf+toplevel_tb.m_toplevel \
|
||||||
|
+maxdelays \
|
||||||
|
+librescan
|
||||||
|
./cvcsim
|
||||||
13
scripts/run_sim.sh
Executable file
13
scripts/run_sim.sh
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
# iverilog -o toplevel_tb.vp \
|
||||||
|
# /opt/packages/gowin/IDE/simlib/gw1n/prim_sim.v \
|
||||||
|
# HW/toplevel.v \
|
||||||
|
# SIM/toplevel_tb.v
|
||||||
|
# vvp toplevel_tb.vp
|
||||||
|
|
||||||
|
cvc +acc \
|
||||||
|
+show_canceled_e +suppress_warns+653+3102 \
|
||||||
|
-v SIM/prim_tsim.v \
|
||||||
|
HW/toplevel.v \
|
||||||
|
SIM/toplevel_tb.v \
|
||||||
|
+librescan
|
||||||
|
./cvcsim
|
||||||
Reference in New Issue
Block a user