From 57535a0c02407a311ec0d892f24ce123c85206cd Mon Sep 17 00:00:00 2001 From: Kirigaya <1193466151@qq.com> Date: Thu, 23 Nov 2023 17:31:21 +0800 Subject: [PATCH] add something in lsp linter test --- .vscode/property.json | 2 +- .../{readme_cn.md => README.md} | 0 Verilog/dependence_test/parent.v | 21 ++++- Verilog/dependence_test/xvlog.log | 0 Verilog/dependence_test/xvlog.pb | 0 lsp/linter/child_1.v | 17 ++++ lsp/linter/child_2.v | 8 ++ lsp/linter/clk.vhd | 36 ++++++++ lsp/linter/dsp.vhd | 43 ++++++++++ lsp/linter/head_1.v | 23 +++++ lsp/linter/hello.v | 6 ++ lsp/linter/main.js | 39 +++++++++ lsp/linter/parent.v | 81 ++++++++++++++++++ lsp/linter/work/_info | 50 +++++++++++ lsp/linter/work/_lib.qdb | Bin 0 -> 49152 bytes lsp/linter/work/_lib1_0.qdb | Bin 0 -> 32768 bytes lsp/linter/work/_lib1_0.qpg | 0 lsp/linter/work/_lib1_0.qtl | Bin 0 -> 1888 bytes lsp/linter/work/_vmake | 4 + lsp/linter/xsim.dir/work/@main.sdb | Bin 0 -> 1057 bytes lsp/linter/xsim.dir/work/dependence_1.sdb | Bin 0 -> 443 bytes lsp/linter/xsim.dir/work/dependence_2.sdb | Bin 0 -> 519 bytes lsp/linter/xsim.dir/work/dsp.vdb | Bin 0 -> 4574 bytes lsp/linter/xsim.dir/work/work.rlx | 8 ++ lsp/linter/xvhdl.log | 1 + lsp/linter/xvhdl.pb | Bin 0 -> 67 bytes lsp/linter/xvlog.log | 0 lsp/linter/xvlog.pb | 0 markdown/clkdiv/figure/wavedrom-5.svg | 1 + markdown/clkdiv/figure/wavedrom-6.svg | 1 + markdown/clkdiv/index.md | 29 +++++++ pdf/clkdiv.pdf | Bin 0 -> 81052 bytes prj/simulation/icarus/out.vvp | 25 ++++++ .../.vscode/property.json | 6 -- scripts/simple.xdc | 0 scripts/test.bd | 0 scripts/test.sv | 0 scripts/test.vhd | 1 + suite/extension.test.ts | 15 ---- suite/index.ts | 38 -------- tcl/top.xdc | 6 ++ user/Hardware/sim/testbench.v | 51 ----------- user/Hardware/src/clkdiv.v | 29 ------- user/Hardware/src/hello.v | 33 ------- user/{Hardware => }/src/Cordic.v | 3 +- user/src/clkdiv.v | 56 ++++++++++++ user/{Hardware => }/src/fsm_test.v | 0 user/src/generate.v | 7 ++ user/src/hello.v | 7 ++ user/{Hardware => }/src/hello.vhd | 0 user/{Hardware => }/src/mult_module.v | 0 user/{Hardware => }/src/netlist_test.v | 0 52 files changed, 469 insertions(+), 178 deletions(-) rename Verilog/dependence_test/{readme_cn.md => README.md} (100%) create mode 100644 Verilog/dependence_test/xvlog.log create mode 100644 Verilog/dependence_test/xvlog.pb create mode 100644 lsp/linter/child_1.v create mode 100644 lsp/linter/child_2.v create mode 100644 lsp/linter/clk.vhd create mode 100644 lsp/linter/dsp.vhd create mode 100644 lsp/linter/head_1.v create mode 100644 lsp/linter/hello.v create mode 100644 lsp/linter/main.js create mode 100644 lsp/linter/parent.v create mode 100644 lsp/linter/work/_info create mode 100644 lsp/linter/work/_lib.qdb create mode 100644 lsp/linter/work/_lib1_0.qdb create mode 100644 lsp/linter/work/_lib1_0.qpg create mode 100644 lsp/linter/work/_lib1_0.qtl create mode 100644 lsp/linter/work/_vmake create mode 100644 lsp/linter/xsim.dir/work/@main.sdb create mode 100644 lsp/linter/xsim.dir/work/dependence_1.sdb create mode 100644 lsp/linter/xsim.dir/work/dependence_2.sdb create mode 100644 lsp/linter/xsim.dir/work/dsp.vdb create mode 100644 lsp/linter/xsim.dir/work/work.rlx create mode 100644 lsp/linter/xvhdl.log create mode 100644 lsp/linter/xvhdl.pb create mode 100644 lsp/linter/xvlog.log create mode 100644 lsp/linter/xvlog.pb create mode 100644 markdown/clkdiv/figure/wavedrom-5.svg create mode 100644 markdown/clkdiv/figure/wavedrom-6.svg create mode 100644 markdown/clkdiv/index.md create mode 100644 pdf/clkdiv.pdf create mode 100644 prj/simulation/icarus/out.vvp rename {Verilog/dependence_test => scripts}/.vscode/property.json (57%) create mode 100644 scripts/simple.xdc create mode 100644 scripts/test.bd create mode 100644 scripts/test.sv create mode 100644 scripts/test.vhd delete mode 100644 suite/extension.test.ts delete mode 100644 suite/index.ts create mode 100644 tcl/top.xdc delete mode 100644 user/Hardware/sim/testbench.v delete mode 100644 user/Hardware/src/clkdiv.v delete mode 100644 user/Hardware/src/hello.v rename user/{Hardware => }/src/Cordic.v (99%) create mode 100644 user/src/clkdiv.v rename user/{Hardware => }/src/fsm_test.v (100%) create mode 100644 user/src/generate.v create mode 100644 user/src/hello.v rename user/{Hardware => }/src/hello.vhd (100%) rename user/{Hardware => }/src/mult_module.v (100%) rename user/{Hardware => }/src/netlist_test.v (100%) diff --git a/.vscode/property.json b/.vscode/property.json index 71cfab5..7dc2beb 100644 --- a/.vscode/property.json +++ b/.vscode/property.json @@ -4,7 +4,7 @@ "PL": "template" }, "soc": { - "core": "cortexM3" + "core": "none" }, "enableShowLog": false, "device": "none" diff --git a/Verilog/dependence_test/readme_cn.md b/Verilog/dependence_test/README.md similarity index 100% rename from Verilog/dependence_test/readme_cn.md rename to Verilog/dependence_test/README.md diff --git a/Verilog/dependence_test/parent.v b/Verilog/dependence_test/parent.v index 7170374..efe9a1a 100644 --- a/Verilog/dependence_test/parent.v +++ b/Verilog/dependence_test/parent.v @@ -17,18 +17,22 @@ module Main ( output Qus, Qs, `main ); -dependence_1 u_dependence_1( +initial begin + $display("hello world"); +end + +dependence_1 u_dependence_1_1( .a(a), .b(b), .c(c), .Result(Qus) ); -dependence_2 u_dependence_2( +dependence_1 u_dependence_1_2( .a(a), .b(b), .c(c), - .Q(Qs) + .Result(Qus) ); dependence_3 u_dependence_3( @@ -38,6 +42,15 @@ dependence_3 u_dependence_3( .Q(Qs) ); +adwadawdwa + +// dependence_3 u_dependence_3( +// .a(a), +// .b(b), +// .c(c), +// .Q(Qs) +// ); + endmodule @@ -66,4 +79,4 @@ endmodule { name: "clk3", wave: "nhNhplPl" }, { name: "clk4", wave: "xlh.L.Hx" }, ]} -*/ \ No newline at end of file +*/ diff --git a/Verilog/dependence_test/xvlog.log b/Verilog/dependence_test/xvlog.log new file mode 100644 index 0000000..e69de29 diff --git a/Verilog/dependence_test/xvlog.pb b/Verilog/dependence_test/xvlog.pb new file mode 100644 index 0000000..e69de29 diff --git a/lsp/linter/child_1.v b/lsp/linter/child_1.v new file mode 100644 index 0000000..962b445 --- /dev/null +++ b/lsp/linter/child_1.v @@ -0,0 +1,17 @@ +module dependence_1 ( + // this is a test + input a, b, c, + // a test + output Result // balabalabala for result +); + + // a & b | ((b & c) & (b | c)) + // &=*, |=+ AB + BC(B+C) + // Distribute AB + BBC + BCC + // Simplify AA = A AB + BC + BC + // Simplify A + A = A AB + BC + // Factor B(A+C) + + assign Result = a & (b | c); + +endmodule \ No newline at end of file diff --git a/lsp/linter/child_2.v b/lsp/linter/child_2.v new file mode 100644 index 0000000..72b0112 --- /dev/null +++ b/lsp/linter/child_2.v @@ -0,0 +1,8 @@ +module dependence_2 ( + input a, b, c, + output Q +); + + assign Q = a & b | ((b & c) & (b | c)); + +endmodule \ No newline at end of file diff --git a/lsp/linter/clk.vhd b/lsp/linter/clk.vhd new file mode 100644 index 0000000..541c7cd --- /dev/null +++ b/lsp/linter/clk.vhd @@ -0,0 +1,36 @@ +LIBRARY IEEE; +USE IEEE.std_logic_1164.all; +entity clk is port( reset, preset, qreset, sysclk, dsysclk, esysclk : in std_logic; + ival : in std_logic_vector(31 downto 0) + ); +end clk; +architecture rtl of clk is + signal foo : std_logic_vector(10+3 downto 0); + signal baz : std_logic_vector(2 downto 0); + signal egg : std_logic_vector(4 to 7-1); +begin + pfoo: process(reset, sysclk) + begin + if( reset /= '0' ) then + foo <= (others => '1'); + elsif( sysclk'event and sysclk = '1' ) then + foo <= ival(31 downto 31-(10+3)); + end if; + end process; + pbaz: process(preset, dsysclk) + begin + if( preset /= '1' ) then + baz <= (others => '0'); + elsif( dsysclk'event and dsysclk = '0' ) then + baz <= ival(2 downto 0); + end if; + end process; + pegg: process(qreset, esysclk) + begin + if( qreset /= '1' ) then + egg <= (others => '0'); + elsif( esysclk'event and esysclk = '0' ) then + egg <= ival(6 downto 4); + end if; + end process; +end rtl; diff --git a/lsp/linter/dsp.vhd b/lsp/linter/dsp.vhd new file mode 100644 index 0000000..154fa75 --- /dev/null +++ b/lsp/linter/dsp.vhd @@ -0,0 +1,43 @@ +-- Nearly useless stub, it's here to support genericmap.vhd +LIBRARY IEEE; +USE IEEE.std_logic_1164.all; +USE IEEE.numeric_std.all; + +entity dsp is generic( + rst_val : std_logic := '0'; + thing_size: integer := 51; + bus_width : integer := 24); + port( + -- Inputs + clk, rstn : in std_logic; + en, start : in std_logic; + param : in std_logic_vector(7 downto 0); + addr : in std_logic_vector(2 downto 0); + din : in std_logic_vector(bus_width-1 downto 0); + we : in std_logic; + memdin : out std_logic_vector(13 downto 0); + -- Outputs + dout : out std_logic_vector(bus_width-1 downto 0); + memaddr : out std_logic_vector(5 downto 0); + memdout : out std_logic_vector(13 downto 0) + ); +end; + +this is a bug statement :D + +architecture rtl of dsp is + signal foo : std_logic; + signal sr : std_logic_vector(63 downto 0); + signal iparam : integer; +begin + iparam <= to_integer(unsigned(param)); + process(clk) begin + -- dout <= std_logic_vector(to_unsigned(1,bus_width)); + if rising_edge(clk) then + if we = '1' then + sr <= sr(thing_size-bus_width-1 downto 0) & din; + end if; + dout <= sr(iparam*bus_width+bus_width-1 downto iparam*bus_width); + end if; + end process; +end rtl; diff --git a/lsp/linter/head_1.v b/lsp/linter/head_1.v new file mode 100644 index 0000000..8543ebd --- /dev/null +++ b/lsp/linter/head_1.v @@ -0,0 +1,23 @@ +`define cow 34 + +module dependence_1 ( + input port_a, port_b, port_c, + output out_q +); + // a & b | ((b & c) & (b | c)) + // &=*, |=+ AB + BC(B+C) + // Distribute AB + BBC + BCC + // Simplify AA = A AB + BC + BC + // Simplify A + A = A AB + BC + // Factor B(A+C) + + assign out_q = port_b & (port_a | port_c); +endmodule + + +module test_1 ( + input port_a, port_b, + output Q +); + assign Q = port_b & port_a; +endmodule \ No newline at end of file diff --git a/lsp/linter/hello.v b/lsp/linter/hello.v new file mode 100644 index 0000000..92f23ac --- /dev/null +++ b/lsp/linter/hello.v @@ -0,0 +1,6 @@ +module hello; + initial begin + $display("hello world"); + $finish; + end +endmodule \ No newline at end of file diff --git a/lsp/linter/main.js b/lsp/linter/main.js new file mode 100644 index 0000000..0c3edf1 --- /dev/null +++ b/lsp/linter/main.js @@ -0,0 +1,39 @@ +const childProcess = require("child_process"); + +remove_files = ["xvlog.pb", "xvhdl.pb"] +remove_folders = ["xsim.dir"] + +/** + * + * @param {string} file + * @param {string[]} args + * @returns {Promise<{ stdout: string, stderr: string }>} + */ +async function easyExec(file, args) { + const allArguments = [file, ...args]; + const command = allArguments.join(' '); + + const p = new Promise( ( resolve, _ ) => { + childProcess.exec(command, ( _, stdout, stderr ) => { + resolve({ stdout, stderr }); + }); + }); + + return p; +} + + +async function linter_vlog(path) { + let command = `xvlog ${path} --nolog`; + + const { stdout, stderr } = await easyExec('C:/modeltech64_10.4/win64/vlog.exe', [path, '--nolog']); + console.log(stdout); + for (const line of stdout.split('\n')) { + if (line.startsWith('ERROR')) { + const tokens = line.split(/:?\s*(?:\[|\])\s*/); + console.log(tokens); + } + } +} + +linter_vlog("./parent.v") diff --git a/lsp/linter/parent.v b/lsp/linter/parent.v new file mode 100644 index 0000000..989745a --- /dev/null +++ b/lsp/linter/parent.v @@ -0,0 +1,81 @@ +/* + * EN: A simple demo to test search order of dependence + * current file -> macro include -> whole project + * expect dependence_1 from child_1.v (macro include) + * expect dependence_2 from child_2.v (whole project) + * cannot find dependence_3 `main + */ + +`include "child_1.v" +`include "child_2.v" +`define main out + +module Main ( + // Main input + input a, b, c, + // Main output + output Qus, Qs, `main +); + +initial begin + $display("hello world"); +end + +dependence_1 u_dependence_1_1( + .a(a), + .b(b), + .c(c), + .Result(Qus) +); + +dependence_1 u_dependence_1_2( + .a(a), + .b(b), + .c(c), + .Result(Qus) +); + +dependence_3 u_dependence_3( + .a(a), + .b(b), + .c(c), + .Q(Qs) +); + +adawdwa +// dependence_3 u_dependence_3( +// .a(a), +// .b(b), +// .c(c), +// .Q(Qs) +// ); + +endmodule + + +/* @wavedrom this is wavedrom demo1 +{ + signal : [ + { name: "clk", wave: "p......" }, + { name: "bus", wave: "x.34.5x", data: "head body tail" }, + { name: "wire", wave: "0.1..0." } + ] +} +*/ + + +/* @wavedrom this is wavedrom demo2 +{ + signal: [ + { name: "pclk", wave: "p......." }, + { name: "Pclk", wave: "P......." }, + { name: "nclk", wave: "n......." }, + { name: "Nclk", wave: "N......." }, + {}, + { name: "clk0", wave: "phnlPHNL" }, + { name: "clk1", wave: "xhlhLHl." }, + { name: "clk2", wave: "hpHplnLn" }, + { name: "clk3", wave: "nhNhplPl" }, + { name: "clk4", wave: "xlh.L.Hx" }, +]} +*/ diff --git a/lsp/linter/work/_info b/lsp/linter/work/_info new file mode 100644 index 0000000..ef7fc63 --- /dev/null +++ b/lsp/linter/work/_info @@ -0,0 +1,50 @@ +m255 +K4 +z2 +13 +!s112 1.1 +!i10d 8192 +!i10e 25 +!i10f 100 +cModel Technology +Z0 dC:/Users/11934/Project/Digital-IDE/Digital-Test/lsp/linter +vdependence_1 +Z1 !s110 1700576438 +!i10b 1 +!s100 1L3L]>oO5UNbT`JWk8I2F1 +IIgLED8NdRzGhBY_234<1k2 +Z2 VDg1SIo80bB@j0V0VzS_@n1 +R0 +Z3 w1696688297 +8child_1.v +Fchild_1.v +L0 1 +Z4 OL;L;10.4;61 +r1 +!s85 0 +31 +Z5 !s108 1700576438.165000 +Z6 !s107 child_2.v|child_1.v|.\parent.v| +Z7 !s90 .\parent.v|-quiet|-nologo| +!i113 0 +Z8 o-quiet -nologo -L mtiAvm -L mtiRnm -L mtiOvm -L mtiUvm -L mtiUPF -L infact +vdependence_2 +R1 +!i10b 1 +!s100 LMOKj0lWZZRTkT2OVHa543 +Ibh;z<<=?EQaGZPfGf:Fh52 +R2 +R0 +R3 +8child_2.v +Fchild_2.v +L0 1 +R4 +r1 +!s85 0 +31 +R5 +R6 +R7 +!i113 0 +R8 diff --git a/lsp/linter/work/_lib.qdb b/lsp/linter/work/_lib.qdb new file mode 100644 index 0000000000000000000000000000000000000000..b7b76720856b79204f03a6e5c21e5f4f5bb4288d GIT binary patch literal 49152 zcmeI*O^X~w7{KwW?&_JKY$6NG5M%Omkim?s39}ecB#^`P1jDE%=C=Y zy-OlqA|m++`UQge0rcWg^aJR@WAxX7@?FVAIkt)QN+6+f6AKX4p8>p>2!leD-x~JEU`E9 z4~J=C`|)-$-p%)`$L?=b$wt@wzb4(PNwB4xt+h3M`%H;t3pd3g_LhlUNqFjpy)~cv zPCVSU-NmeS^Bar&d^)bddRWGGIxl#Q*6V8zosAoz-<^%@yT2T>;=Yw8(XEBrqqn8raNE<02hr>XnDpyiBu9O7 zR;!7fUb9)TRCV;QXO4Sn7QMT9Lak_XOzRyx&0VirKjogaDY=p_B$v5A?yF!-3Z`$j+gqB*2>yFCjriJe&Y9|f{&w!hJzOw&<3y>&W? z3w?MV>sPV<{;`|6{&pVgRk2z{{U#J BZ5aRn literal 0 HcmV?d00001 diff --git a/lsp/linter/work/_lib1_0.qdb b/lsp/linter/work/_lib1_0.qdb new file mode 100644 index 0000000000000000000000000000000000000000..5eed8c2a66be0385b9993457b366581aebeb7bbf GIT binary patch literal 32768 zcmeI)!D|yi6vy#5GrL9_BIqTDlFl3r6r}$_V_76PLz^$ z=S0MW=i)<$pcWd7`-S$^ZN+{RvvMN#VCBSSS6`=t00IagfB*srAb|(_S`u^KM?vMk{Hw6W4A$ewMg- z*F7AhnNRz!xz$ddB&}69_InE<{opUsXfPQ2$wl7YYQES`{(VC6&U*ckxl`S!DM@$x zemdUE(uv>c?oUQV4!iTAcGl**D15o-wJKGYm(}e4eDZv#a7148<+=0b<+0uKR&%q_ z>bR##XVv+sAHJXLc8A`zlb7v!B|nEf6Z^;hvOnyZJ-wbNMjf%G>sa)9?8;HB zLWo4&iyo9s5sauq{i>{s5N_fBO=U|e58*!lDwCza7ujR6zwLMX)gIf=x84%~1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**{wIOEDwenuDWxKbifY6ZRf{fa H_yxdU8nk&d literal 0 HcmV?d00001 diff --git a/lsp/linter/work/_lib1_0.qpg b/lsp/linter/work/_lib1_0.qpg new file mode 100644 index 0000000..e69de29 diff --git a/lsp/linter/work/_lib1_0.qtl b/lsp/linter/work/_lib1_0.qtl new file mode 100644 index 0000000000000000000000000000000000000000..d3665646c4ecdb0a19d0c8f69dd15a3c90ba0e0e GIT binary patch literal 1888 zcmeHGcTCe!5PrYWmQpD#6l*QRLS?8?QBfN}rnrg&0~j%J5r#2ZF;RmG5-W%%2ID}$ zMielt28>24(YP3D6|Lens6cT9f*3p_GJ4kIH z4lNKA5lcRc1Ly-IT|5$z5m15*8-e&FBI9rb!@(GsWsi?9f{3zA6XVdvIq=w1>%&uo zd@#28$HgfRXCC#}L^);)dJ~sKPf7N?(?3&w5blz^aE&3#rMWw$2rdkxsnOVht%~Gs zdvuPPm!2=)ErlTn!35S1Kx}X|Xu{XQhrFIY_Zel~b zo~FWQDU=M#*@@Jq7z3|lJ{@sIQWZO~q`j9$ZY#f++V^c{+V2W_YAd!m#2VR}OTw)& z1(!tuVVsTS;xF3^2g_7El-L>gSg`3Rx5L>u4%KB$`#H9EWg8F0|J?Ul;QWK@_0lQh zkRe2}bvDy{v47pDrh)zrS$7{>+|pF*mYcwl>fC8@q-TRVYy^vPk0Bqqd%zRZ^3peS z(o&6S(h)i|BH>2Dr}))#lRVSzHQKp1csU$z-<-NP>iUBH{`=FPbY0Wm6gtCm7qTgi zrx#$?suCC1=b~kfNPbrY47u{#E=rv zGE?mI!25G#9g3I@pVUf@-TJ{}GA(RNx#e|UqufuwN(Op^e+wnU4$NzZc5!T-**@Gw zg|Kje4c}&c0mKGRv4|9wKo-d#kgDKkTjZ^sP^-qS^OiPGSLoyXAgDleW-)Z3)FSG( z!%0_!@<*ff9!^T0R~jABEUCIMajo0K@0aZRBA9l)phr{jbx48!NNfvi6>Q4pc1$&{ zLv;fn&N!<$`9z!o5T}DxoZ{{twz#Y5s!K^_uzF^g>CQ2 zpCJhd@TfZ<6Y*St1OSn5{4tGXHV{6vf}OO;V?E+I%3D4=FB*3Ur|o1BmG&K*AMj7#SE)X{!`Pio}A%^Pdj4$7Xg#?5UMEe6k!dG~ksI|rUr3&bal|H4O5ck^ zYC$Bp=pGy&OYuPvxdST-;sejO2BB}oVQ{nPyRrAyt6EFd+KG;P!JGZ4ZZ(#hwrzz` z5Z<;{%9dDE_b3cC-oWAt@I5Jj*dsxIjz9er=Y%xr77Pn8NEbyC<|c;kVv75-aqkQ+ zV-Y#gLB}`ZhDJ17%%UN$Zo6b7z!li0;Rf}iWR!}Pq zPtC%faT(H}DyCn61zV-YL??OX7n%2&vrguiUt->4&N?xfUsgQ#Vq>@MeBmO4q%g^` zGdZl&oaIao>on&|CWm#J(>R^OV48C^lfydAxt7Uco#tH6eC6jhH_(ZW35g0G-B<}!GVIW5HK zmhMJI1_O|73@jj0A1DnHKrtO80W@F(gTwoMYwt0zGBB_>n1c)iDr9T`N;)ubCjp5g z3<%*S?81#0!mL0;*s}aGGdwqg<%A(70qukVMkWU>sBH`kjLhsDoD2?An1G5wq9E-+ zQAREXhb=%cMn(r~peR3B6wLL6avhXm;{UlEfME<#;~)m~7?Kn_l9ae0iWCQuGEN3Y R7N9%07(mg(uiIpIvu(Aj# zEPVzmdwqlB%qHP%P@H0z`R1P)_ENd383){hjXrN`#$H~ZTqvxSLEoeIS31Tpwf5-j z^t?PEf0+4t<{Q3lNCRWHkw5mE{dTtp6(+DB2Qf)xI)ewwILO)D)AHs)r`Nr0DUfV~ z6~Dt}0dv!(zypS$uhH`d7640oEYvJiO)e6a8tmRs;P&6R^$QyrvK#Q~WC*XDnbNd9 zT?8moN*w4;vskEfGF2()g_%;c&vY@+kosv#TQi=g#Me8~P?gUVrR$Ow%2E_3v210& aOVXk%iDDOZRsWGeSw2__d1_4+{sKQkSYjFg literal 0 HcmV?d00001 diff --git a/lsp/linter/xsim.dir/work/dsp.vdb b/lsp/linter/xsim.dir/work/dsp.vdb new file mode 100644 index 0000000000000000000000000000000000000000..5725d0330c8252aa0a9e6f5bdbf8654be94ae9bc GIT binary patch literal 4574 zcmcIo-D_M$6rX$VZjw#YCdRf%RT4FpK50dS`VpN-w)SpKwqSiJJ}lWq#{NvS;Ao1tw3om+N?|_iEzW(NhJR!FFMdI0f?sTwRFJB-0YmQY< z39;RxA)lt7nWN{HX9}5GJ}hR_)3uqxbgftjZ!Atv6w{OG)!NGH#fUE+3!lm5uhlj; z-mlkdg?w1}vbO$Cj~D^~Pl&CA?+N)hx%Y!|v)-4qH@H!U;8!tZOhSS=v;tOfm%I?5cIS!ul*thhX(Y16LY_&7&S9mqo4okhkp6a_Pc|E+ zW?j+lT6@S#a-q~HEh{SD?uKWOv=aGDW`aqFj>a>Dtd=TeTpb#R6yn=}I6O^%9awbM z!!+NMO=qUUDSd1669^q?FVGav<}yq=bjDPyeWcUdD3?nM)dh3!(A3`cL$kTDScay) z$20?eEWJ>jD{YQ9>kV^vQt>=bJfy<+k!FARQo0}~v+1Knhm~jOEfWH|k1E|1>89Rn zmMfRX>l+s=*QV*o&-$rPJ_q>%WE12H$Oj--K|Tce2!s|5AwLGW2J#8Wb&yYqh(J!! zQ*Oyxl4!C;zmL;zd5L}o@-j4-CgpkE|H7ARuwEzPS*a&CSotwh3n&YkdqA_6DQOA6 z$4uBt8hOV$(eYC-RJl((X|(_j@e(#3SdPaG{DSEg4{~=Yae2Yz;7Cxjk$7=bnStd< z%pelK;CgjXH8Rp@>5LeWWbZJ6cMnUwXi?GbAx8&DN~uwEYzMH0drY7(beVixRF@jth0f9Pv=OEzX#xw{+*hw%rDN3 z)AO>N%3rVzk|LWQU_;w7C&|W`7|Q2p_dI8}w3vV^;mN$Qd`&Y?QN9@RL3+H>NR^BP zSaSR54%Da{A^6dt#_!%nb-vnMs+ha3q%Y~wY>&Wzj7ysDC^{U$;Ujw55n?JcuSQ0)vy-z#c zPfo$JQ!sk7;&t>lDziMIHGIb@LPvPg0`WW7<;jiTL6ET{I5OK3&bML!}Q33y1Jidq#@X7HQg%ON*JwCD4l z^A^>D9HSTql_6sR?`+xFkEkGcikOL1oO-D`@GR2bfhp;!E?qBA7?iNJ>03?}qJcu> z{+aH(ZAF9ME=7yr{#W48K0dbQ1C%Y!AgCRV1FCS4*yYS}dSOS;LM2EIQqK;i;Xp?c)*E7d4R-Nn!Dox(|5p}MnAj2VVKf$ z&NEMPkqIBBY&w=RD>ib#DH!JV5EPkX${JbDHOKK63Gm5@Ezy&Za!-PZt@1H}v+T1a zUMMiV$T z

9)i~~$8Y)s(bU`xCZZ7%F9XgT#VmMA>88uYuoTSy60X0(CF_XWW7dL6X^r1s%k z&TRvHdBBnn%O}x)Xah(&Z7{JcV*)2_wggr%yERx_en`z|%K%?Cz`^JB2nVE$157Mz zOyJ;POO(IOg)O?}I?50I9mGupu8lMCSaJ0k)QDT4clkbusheadbodytailwire \ No newline at end of file diff --git a/markdown/clkdiv/figure/wavedrom-6.svg b/markdown/clkdiv/figure/wavedrom-6.svg new file mode 100644 index 0000000..f8e9a21 --- /dev/null +++ b/markdown/clkdiv/figure/wavedrom-6.svg @@ -0,0 +1 @@ +pclkPclknclkNclkclk0clk1clk2clk3clk4 \ No newline at end of file diff --git a/markdown/clkdiv/index.md b/markdown/clkdiv/index.md new file mode 100644 index 0000000..374f06a --- /dev/null +++ b/markdown/clkdiv/index.md @@ -0,0 +1,29 @@ +# clkdiv +## Basic Info +- 3 params, 0 ports +- top module √ + +## params +no params info + +## ports +| name | type | width | description | +| :--- | :--- | :--- | :--- | +| clk50 | input | 1 | | +| rst_n | input | 1 | | +| clkout | output | 1 | | + +## Dependency +no Dependencies info + + + + +



+ + + + +


+ + diff --git a/pdf/clkdiv.pdf b/pdf/clkdiv.pdf new file mode 100644 index 0000000000000000000000000000000000000000..301216a40fafba17b09589ad235dd55a35de7dd6 GIT binary patch literal 81052 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 V58qc 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 S3*p=lC>Itzy_kYH*8c!)>?o}O literal 0 HcmV?d00001 diff --git a/prj/simulation/icarus/out.vvp b/prj/simulation/icarus/out.vvp new file mode 100644 index 0000000..2f2c89f --- /dev/null +++ b/prj/simulation/icarus/out.vvp @@ -0,0 +1,25 @@ +#! /c/Source/iverilog-install/bin/vvp +:ivl_version "12.0 (devel)" "(s20150603-1110-g18392a46)"; +:ivl_delay_selection "TYPICAL"; +:vpi_time_precision + 0; +:vpi_module "C:\iverilog\lib\ivl\system.vpi"; +:vpi_module "C:\iverilog\lib\ivl\vhdl_sys.vpi"; +:vpi_module "C:\iverilog\lib\ivl\vhdl_textio.vpi"; +:vpi_module "C:\iverilog\lib\ivl\v2005_math.vpi"; +:vpi_module "C:\iverilog\lib\ivl\va_math.vpi"; +:vpi_module "C:\iverilog\lib\ivl\v2009.vpi"; +S_000001e5c16a3530 .scope package, "$unit" "$unit" 2 1; + .timescale 0 0; +S_000001e5c16a36c0 .scope module, "hello" "hello" 3 1; + .timescale 0 0; + .scope S_000001e5c16a36c0; +T_0 ; + %vpi_call/w 3 4 "$display", "hello world" {0 0 0}; + %end; + .thread T_0; +# The file index is used to find the file name in the following table. +:file_names 4; + "N/A"; + ""; + "-"; + "c:/Users/11934/Project/Digital-IDE/Digital-Test/user/src/hello.v"; diff --git a/Verilog/dependence_test/.vscode/property.json b/scripts/.vscode/property.json similarity index 57% rename from Verilog/dependence_test/.vscode/property.json rename to scripts/.vscode/property.json index 276c76f..7dc2beb 100644 --- a/Verilog/dependence_test/.vscode/property.json +++ b/scripts/.vscode/property.json @@ -6,12 +6,6 @@ "soc": { "core": "none" }, - "arch": { - "hardware": { - "sim": "./", - "src": "./" - } - }, "enableShowLog": false, "device": "none" } \ No newline at end of file diff --git a/scripts/simple.xdc b/scripts/simple.xdc new file mode 100644 index 0000000..e69de29 diff --git a/scripts/test.bd b/scripts/test.bd new file mode 100644 index 0000000..e69de29 diff --git a/scripts/test.sv b/scripts/test.sv new file mode 100644 index 0000000..e69de29 diff --git a/scripts/test.vhd b/scripts/test.vhd new file mode 100644 index 0000000..991aa1a --- /dev/null +++ b/scripts/test.vhd @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/suite/extension.test.ts b/suite/extension.test.ts deleted file mode 100644 index 4ca0ab4..0000000 --- a/suite/extension.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as assert from 'assert'; - -// You can import and use all API from the 'vscode' module -// as well as import your extension to test it -import * as vscode from 'vscode'; -// import * as myExtension from '../../extension'; - -suite('Extension Test Suite', () => { - vscode.window.showInformationMessage('Start all tests.'); - - test('Sample test', () => { - assert.strictEqual(-1, [1, 2, 3].indexOf(5)); - assert.strictEqual(-1, [1, 2, 3].indexOf(0)); - }); -}); diff --git a/suite/index.ts b/suite/index.ts deleted file mode 100644 index 7029e38..0000000 --- a/suite/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import * as path from 'path'; -import * as Mocha from 'mocha'; -import * as glob from 'glob'; - -export function run(): Promise { - // Create the mocha test - const mocha = new Mocha({ - ui: 'tdd', - color: true - }); - - const testsRoot = path.resolve(__dirname, '..'); - - return new Promise((c, e) => { - glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err); - } - - // Add files to the test suite - files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); - - try { - // Run the mocha test - mocha.run(failures => { - if (failures > 0) { - e(new Error(`${failures} tests failed.`)); - } else { - c(); - } - }); - } catch (err) { - console.error(err); - e(err); - } - }); - }); -} diff --git a/tcl/top.xdc b/tcl/top.xdc new file mode 100644 index 0000000..bef1d43 --- /dev/null +++ b/tcl/top.xdc @@ -0,0 +1,6 @@ +set_property PACKAGE PIN W30[get_ports R3_A2] +set_property PACKAGE PIN V27[get_ports TTT14] +set_property PACKAGE PIN W28[get_ports TTT12] +set_property PACKAGE_ PIN W25[get_ports TTT10] +set_property PACKAGE_ PIN W26[get_ports TTT11] +set_property PACKAGE PIN U25[get_ports TTT_CLK1] diff --git a/user/Hardware/sim/testbench.v b/user/Hardware/sim/testbench.v deleted file mode 100644 index 7ad4f51..0000000 --- a/user/Hardware/sim/testbench.v +++ /dev/null @@ -1,51 +0,0 @@ -module testbench(); - -parameter DATA_WIDTH = 32; -parameter ADDR_WIDTH = 32; -parameter MAIN_FRE = 100; //unit MHz -reg sys_clk = 0; -reg sys_rst = 1; -reg [DATA_WIDTH-1:0] data = 0; -reg [ADDR_WIDTH-1:0] addr = 0; - -always begin - #(500/MAIN_FRE) sys_clk = ~sys_clk; -end - -always begin - #50 sys_rst = 0; -end - -always @(posedge sys_clk) begin - if (sys_rst) - addr = 0; - else - addr = addr + 1; -end -always @(posedge sys_clk) begin - if (sys_rst) - data = 0; - else - data = data + 1; -end - -//Instance -// outports wire -wire outp; - -mux2to1 u_mux2to1( - .a ( a ), - .b ( b ), - .sel ( sel ), - .outp ( outp ) -); - - - -initial begin - $dumpfile("wave.vcd"); - $dumpvars(0, testbench); - #50000 $finish; -end - -endmodule //TOP diff --git a/user/Hardware/src/clkdiv.v b/user/Hardware/src/clkdiv.v deleted file mode 100644 index 05a47c1..0000000 --- a/user/Hardware/src/clkdiv.v +++ /dev/null @@ -1,29 +0,0 @@ -module clkdiv( - input clk50, - input rst_n, - output reg clkout -); - reg [15:0] cnt; - always @(posedge clk50 or negedge rst_n) - begin - if(!rst_n) - begin - cnt <= 16'b0; - clkout <= 1'b0; - end - else if(cnt == 16'd162) - begin - clkout <= 1'b1; - cnt <= cnt + 16'd1; - end - else if(cnt == 16'd325) - begin - clkout <= 1'b0; - cnt <= 16'd0; - end - else - begin - cnt <= cnt + 16'd1; - end - end -endmodule \ No newline at end of file diff --git a/user/Hardware/src/hello.v b/user/Hardware/src/hello.v deleted file mode 100644 index 015ee6b..0000000 --- a/user/Hardware/src/hello.v +++ /dev/null @@ -1,33 +0,0 @@ -// VHDL code for a 2-to-1 multiplexer - -module mux2to1( - input wire a, - input wire b, - input wire sel, - output wire outp - ); - - // outports wire -wire [XY_BITS-1:0] x_o; -wire [XY_BITS-1:0] y_o; -wire [PH_BITS-1:0] phase_out; -wire valid_out; - -Cordic u_Cordic( - .clk ( clk ), - .RST ( RST ), - .x_i ( x_i ), - .y_i ( y_i ), - .phase_in ( phase_in ), - .x_o ( x_o ), - .y_o ( y_o ), - .phase_out ( phase_out ), - .valid_in ( valid_in ), - .valid_out ( valid_out ) -); - - - - assign outp = sel == 1'b0 ? a : b; - -endmodule diff --git a/user/Hardware/src/Cordic.v b/user/src/Cordic.v similarity index 99% rename from user/Hardware/src/Cordic.v rename to user/src/Cordic.v index 20b354c..0a7fa30 100644 --- a/user/Hardware/src/Cordic.v +++ b/user/src/Cordic.v @@ -2,11 +2,12 @@ `include "mult_module.v" +`define ITER_RAW 32 module Cordic #( parameter XY_BITS = 12, parameter PH_BITS = 32, - parameter ITERATIONS = 32, + parameter ITERATIONS = `ITER_RAW, parameter CORDIC_STYLE = "ROTATE", parameter PHASE_ACC = "ON" )( diff --git a/user/src/clkdiv.v b/user/src/clkdiv.v new file mode 100644 index 0000000..d3685b5 --- /dev/null +++ b/user/src/clkdiv.v @@ -0,0 +1,56 @@ +module clkdiv( + input clk50, + input rst_n, + output reg clkout +); + reg [15:0] cnt; + always @(posedge clk50 or negedge rst_n) + begin + if(!rst_n) + begin + cnt <= 16'b0; + clkout <= 1'b0; + end + else if(cnt == 16'd162) + begin + clkout <= 1'b1; + cnt <= cnt + 16'd1; + end + else if(cnt == 16'd325) + begin + clkout <= 1'b0; + cnt <= 16'd0; + end + else + begin + cnt <= cnt + 16'd1; + end + end +endmodule + +/* @wavedrom this is wavedrom demo1 +{ + signal : [ + { name: "clk", wave: "p......" }, + { name: "bus", wave: "x.34.5x", data: "head body tail" }, + { name: "wire", wave: "0.1..0." } + ] +} +*/ + + +/* @wavedrom this is wavedrom demo2 +{ + signal: [ + { name: "pclk", wave: "p......." }, + { name: "Pclk", wave: "P......." }, + { name: "nclk", wave: "n......." }, + { name: "Nclk", wave: "N......." }, + {}, + { name: "clk0", wave: "phnlPHNL" }, + { name: "clk1", wave: "xhlhLHl." }, + { name: "clk2", wave: "hpHplnLn" }, + { name: "clk3", wave: "nhNhplPl" }, + { name: "clk4", wave: "xlh.L.Hx" }, +]} +*/ \ No newline at end of file diff --git a/user/Hardware/src/fsm_test.v b/user/src/fsm_test.v similarity index 100% rename from user/Hardware/src/fsm_test.v rename to user/src/fsm_test.v diff --git a/user/src/generate.v b/user/src/generate.v new file mode 100644 index 0000000..64edc15 --- /dev/null +++ b/user/src/generate.v @@ -0,0 +1,7 @@ +module led ( + input key, // key in + output led // led out +); + assign led = ~key; + +endmodule //led diff --git a/user/src/hello.v b/user/src/hello.v new file mode 100644 index 0000000..4e636b2 --- /dev/null +++ b/user/src/hello.v @@ -0,0 +1,7 @@ +module hello (); + + initial begin + $display("hello world"); + end + +endmodule //hello diff --git a/user/Hardware/src/hello.vhd b/user/src/hello.vhd similarity index 100% rename from user/Hardware/src/hello.vhd rename to user/src/hello.vhd diff --git a/user/Hardware/src/mult_module.v b/user/src/mult_module.v similarity index 100% rename from user/Hardware/src/mult_module.v rename to user/src/mult_module.v diff --git a/user/Hardware/src/netlist_test.v b/user/src/netlist_test.v similarity index 100% rename from user/Hardware/src/netlist_test.v rename to user/src/netlist_test.v