ming_node 3.0.2 → 3.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/extlib/MingExcelTool.js +75 -0
- package/index.js +4 -10
- package/output/ming_api_mock/ming_api_mock.js +3251 -0
- package/output/ming_api_mock/mock.bat +21 -0
- package/output/ming_api_mock/mock.sh +15 -0
- package/output/npr/npr.bat +7 -0
- package/output/npr/npr_plugins/MakeModelsim/index.js +157 -0
- package/output/npr/npr_plugins/Modelsim/index.js +72 -0
- package/output/npr/npr_plugins/common/ming_node.js +58 -0
- package/output/npr/npr_plugins/demo/index.js +1 -0
- package/output/npr/npr_plugins/hello/index.js +1 -0
- package/output/npr/npr_plugins/install/index.js +27 -0
- package/output/npr/npr_plugins/list/index.js +20 -0
- package/output/npr/npr_plugins/verilog/Readme.md +1 -0
- package/output/npr/npr_plugins/verilog/breath_led/breath_led.v +99 -0
- package/output/npr/npr_plugins/verilog/breath_led/tb.v +39 -0
- package/output/npr/npr_plugins/verilog/demo/led.v +12 -0
- package/output/npr/npr_plugins/verilog/demo/sims/Makefile +25 -0
- package/output/npr/npr_plugins/verilog/demo/sims/filelist.f +1 -0
- package/output/npr/npr_plugins/verilog/demo/sims/run.do +3 -0
- package/output/npr/npr_plugins/verilog/demo/tb.v +30 -0
- package/output/npr/npr_plugins/verilog/index.js +25 -0
- package/output/npr/npr_plugins/verilog/key_led/key_debounce.v +57 -0
- package/output/npr/npr_plugins/verilog/key_led/tb.v +78 -0
- package/output/npr/npr_plugins/verilog/key_led/toggle_pin.v +35 -0
- package/output/npr/npr_plugins/verilog/led/led.v +12 -0
- package/output/npr/npr_plugins/verilog/led/tb.v +30 -0
- package/output/npr/npr_plugins/verilog/modelsim_tcl/filelist.f +2 -0
- package/output/npr/npr_plugins/verilog/modelsim_tcl/restart.tcl +1 -0
- package/output/npr/npr_plugins/verilog/modelsim_tcl/run.do +3 -0
- package/output/npr/npr_plugins/verilog/modelsim_tcl//346/216/247/345/210/266/345/217/260_Makefile +24 -0
- package/output/npr/npr_plugins/verilog/modelsim_tcl//347/252/227/345/217/243_Makefile +24 -0
- package/output/npr/npr_plugins/verilog/simple_verilog/sims/C_Makefile +27 -0
- package/output/npr/npr_plugins/verilog/simple_verilog/sims/Makefile +25 -0
- package/output/npr/npr_plugins/verilog/simple_verilog/sims/W_Makefile +24 -0
- package/output/npr/npr_plugins/verilog/simple_verilog/sims/filelist.f +1 -0
- package/output/npr/npr_plugins/verilog/simple_verilog/sims/run.do +3 -0
- package/output/npr/npr_plugins/verilog/simple_verilog/tb/led.sv +72 -0
- package/output/npr/npr_plugins/verilog/simple_verilog/tb/tb.sv +54 -0
- package/output/npr/npr_plugins/verilog/smg/HC_FPGA_Demo_Top.v +29 -0
- package/output/npr/npr_plugins/verilog/smg/digital_tube.v +93 -0
- package/output/npr/npr_plugins/verilog/smg/tb.v +56 -0
- package/output/npr/npr_plugins/verilog/uart/calc.js +4 -0
- package/output/npr/npr_plugins/verilog/uart/tb.v +35 -0
- package/output/npr/npr_plugins/verilog/uart/top_UART_RX.v +37 -0
- package/output/npr/npr_plugins/verilog/uart/top_UART_TX.v +41 -0
- package/output/npr/npr_plugins/verilog/uart/uart_rx.v +148 -0
- package/output/npr/npr_plugins/verilog/uart/uart_rx_led.v +23 -0
- package/output/npr/npr_plugins/verilog/uart/uart_tx.v +121 -0
- package/output/npr/npr_plugins/verilog/uart/uart_tx_count.v +72 -0
- package/output/npr/readme.md +7 -0
- package/package.json +1 -1
- package/plugins/Modelsim/Modelsim.js +29 -0
- package/plugins/Modelsim/run.bat +6 -0
- package/plugins/Modelsim/top.do +6 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
@ECHO OFF
|
2
|
+
TITLE mock
|
3
|
+
|
4
|
+
SET curPath=%cd%
|
5
|
+
|
6
|
+
:start
|
7
|
+
set p1=%1%
|
8
|
+
set p2=%2%
|
9
|
+
set port=8888
|
10
|
+
set serverfile=""
|
11
|
+
set swi=0
|
12
|
+
echo %p1%|findstr /be "[0-9]*" >nul && set swi=1 || set swi=2
|
13
|
+
|
14
|
+
|
15
|
+
if %swi%==1 set port=%p1%
|
16
|
+
if %swi%==2 set serverfile=%p1%
|
17
|
+
if %swi%==2 set port=%p2%
|
18
|
+
if %swi%==2 (if not "%1" == "" curl %serverfile% > server.js)
|
19
|
+
echo port=%port%
|
20
|
+
echo serverfile=%serverfile%
|
21
|
+
node "%~dp0/ming_api_mock.js" "%curPath%/" %port% "%1" "%2" "%3" "%4" "%5" "%6" "%7" "%8" "%9"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
#port=8888
|
3
|
+
serverfile=""
|
4
|
+
sw=`echo $1 | sed 's/[0-9]//g' | sed 's/-//g'`
|
5
|
+
if [ ${#sw} -eq 0 ];then
|
6
|
+
port=$1
|
7
|
+
else
|
8
|
+
serverfile=$1
|
9
|
+
port=$2
|
10
|
+
curl $serverfile > server.js
|
11
|
+
fi
|
12
|
+
|
13
|
+
echo port=$port
|
14
|
+
echo serverfile=$serverfile
|
15
|
+
node $(cd $(dirname ${BASH_SOURCE:-$0});pwd)/ming_api_mock.js $(pwd)/ $port $@
|
@@ -0,0 +1,157 @@
|
|
1
|
+
/**
|
2
|
+
build/CUR_DIR
|
3
|
+
led/tb.v led.v
|
4
|
+
*/
|
5
|
+
const child_process = require('child_process');
|
6
|
+
const fs = require('fs');
|
7
|
+
var args = process.argv.splice(2)
|
8
|
+
let argsPath=args[0] || "./";
|
9
|
+
|
10
|
+
|
11
|
+
const M={};
|
12
|
+
M.exec = function (comand) {
|
13
|
+
let promise = new Promise(function (reslove, reject) {
|
14
|
+
child_process.exec(comand, function (err, stdout, stderr) {
|
15
|
+
if (err || stderr) console.error(err, stderr);
|
16
|
+
reslove(stdout);
|
17
|
+
});
|
18
|
+
|
19
|
+
})
|
20
|
+
return promise;
|
21
|
+
}
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
async function install(){
|
27
|
+
await M.exec(`mkdir doc`);
|
28
|
+
await M.exec(`mkdir opt`);
|
29
|
+
await M.exec(`mkdir sims`);
|
30
|
+
await M.exec(`mkdir src`);
|
31
|
+
await M.exec(`mkdir tb`);
|
32
|
+
|
33
|
+
fs.writeFileSync('doc/Readme.md',
|
34
|
+
`# led
|
35
|
+
led test`
|
36
|
+
);
|
37
|
+
|
38
|
+
fs.writeFileSync('sims/filelist.f',
|
39
|
+
`"../src/led.v"
|
40
|
+
"../tb/tb.v"`
|
41
|
+
);
|
42
|
+
|
43
|
+
|
44
|
+
fs.writeFileSync('sims/Makefile',
|
45
|
+
`#setting parameter
|
46
|
+
work= work
|
47
|
+
output= ../opt
|
48
|
+
vsimbatch0= -do "run -all"
|
49
|
+
|
50
|
+
|
51
|
+
#commandbegin
|
52
|
+
all:compile vsim
|
53
|
+
lib:
|
54
|
+
\techo "start compile for Questasim10.6c"
|
55
|
+
\tvlib $(work)
|
56
|
+
\tvmap work $(work)
|
57
|
+
vlog :
|
58
|
+
\tvlog -f filelist.f -l $(output)/compile.log
|
59
|
+
compile: lib vlog
|
60
|
+
run:
|
61
|
+
\tmodelsim -do ./run.do
|
62
|
+
#make clean
|
63
|
+
clean:
|
64
|
+
\tdel *.wlf
|
65
|
+
\tdel vsim_stacktrace.vstf
|
66
|
+
\tdel transcript
|
67
|
+
\tdel modelsim.ini
|
68
|
+
\trmdir /s /q work
|
69
|
+
`
|
70
|
+
);
|
71
|
+
|
72
|
+
fs.writeFileSync('sims/run.do',
|
73
|
+
`vsim -voptargs=+acc work.tb
|
74
|
+
add wave -position insertpoint sim:/tb/*
|
75
|
+
run 100ns`
|
76
|
+
);
|
77
|
+
|
78
|
+
|
79
|
+
fs.writeFileSync('src/led.v',
|
80
|
+
`module led(
|
81
|
+
input key ,
|
82
|
+
|
83
|
+
output led
|
84
|
+
);
|
85
|
+
|
86
|
+
|
87
|
+
assign led =key;
|
88
|
+
|
89
|
+
endmodule`
|
90
|
+
);
|
91
|
+
|
92
|
+
fs.writeFileSync('tb/tb.v',
|
93
|
+
`\`timescale 1ns / 1ns //仿真单位/仿真精度
|
94
|
+
|
95
|
+
module tb();
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
reg key;
|
100
|
+
wire led;
|
101
|
+
|
102
|
+
|
103
|
+
initial begin
|
104
|
+
key <= 1'b1;
|
105
|
+
#12
|
106
|
+
key <= 1'b1;
|
107
|
+
#3
|
108
|
+
key <= 1'b0;
|
109
|
+
#2
|
110
|
+
key <= 1'b1;
|
111
|
+
#2
|
112
|
+
key <= 1'b0;
|
113
|
+
#2
|
114
|
+
key <= 1'b1;
|
115
|
+
#3
|
116
|
+
key <= 1'b0;
|
117
|
+
#2
|
118
|
+
key <= 1'b1;
|
119
|
+
#2
|
120
|
+
key <= 1'b0;
|
121
|
+
end
|
122
|
+
|
123
|
+
//例化led模块
|
124
|
+
led u_led(
|
125
|
+
.key (key),
|
126
|
+
.led (led)
|
127
|
+
);
|
128
|
+
|
129
|
+
endmodule
|
130
|
+
|
131
|
+
`
|
132
|
+
);
|
133
|
+
|
134
|
+
console.log("MakeModelsim install success!")
|
135
|
+
}
|
136
|
+
|
137
|
+
function help(){
|
138
|
+
console.log(
|
139
|
+
`
|
140
|
+
cd sims;
|
141
|
+
make compile
|
142
|
+
make run
|
143
|
+
`)
|
144
|
+
}
|
145
|
+
|
146
|
+
function main(){
|
147
|
+
|
148
|
+
switch (args[2]){
|
149
|
+
case "": install();break;
|
150
|
+
case "help": help();break;
|
151
|
+
}
|
152
|
+
|
153
|
+
}
|
154
|
+
|
155
|
+
|
156
|
+
main()
|
157
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
/**
|
2
|
+
build/CUR_DIR
|
3
|
+
led/tb.v led.v
|
4
|
+
*/
|
5
|
+
const child_process = require('child_process');
|
6
|
+
const fs = require('fs');
|
7
|
+
var args = process.argv.splice(2)
|
8
|
+
let argsPath=args[0] || "./";
|
9
|
+
|
10
|
+
|
11
|
+
const M={};
|
12
|
+
M.exec = function (comand) {
|
13
|
+
let promise = new Promise(function (reslove, reject) {
|
14
|
+
child_process.exec(comand, function (err, stdout, stderr) {
|
15
|
+
if (err || stderr) console.error(err, stderr);
|
16
|
+
reslove(stdout);
|
17
|
+
});
|
18
|
+
|
19
|
+
})
|
20
|
+
return promise;
|
21
|
+
}
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
async function install(){
|
27
|
+
await M.exec(`mkdir build`);
|
28
|
+
fs.writeFileSync('build/run.bat',
|
29
|
+
|
30
|
+
`rmdir /s /q work
|
31
|
+
del vsim.wlf
|
32
|
+
del transcript
|
33
|
+
set MY_PARAM=%1%
|
34
|
+
modelsim -do top.do`
|
35
|
+
|
36
|
+
);
|
37
|
+
|
38
|
+
|
39
|
+
fs.writeFileSync('build/top.do',
|
40
|
+
|
41
|
+
`vlib work
|
42
|
+
vmap work work
|
43
|
+
vlog ../$::env(MY_PARAM)/*v
|
44
|
+
vsim -voptargs=+acc work.tb
|
45
|
+
add wave -position insertpoint sim:/tb/*
|
46
|
+
run 100ns`
|
47
|
+
|
48
|
+
);
|
49
|
+
|
50
|
+
console.log("Modelsim install success!")
|
51
|
+
}
|
52
|
+
|
53
|
+
function help(){
|
54
|
+
console.log(
|
55
|
+
`
|
56
|
+
build/$:run led
|
57
|
+
led/tb.v led.v
|
58
|
+
`)
|
59
|
+
}
|
60
|
+
|
61
|
+
function main(){
|
62
|
+
|
63
|
+
switch (args[2]){
|
64
|
+
case "": install();break;
|
65
|
+
case "help": help();break;
|
66
|
+
}
|
67
|
+
|
68
|
+
}
|
69
|
+
|
70
|
+
|
71
|
+
main()
|
72
|
+
|
@@ -0,0 +1,58 @@
|
|
1
|
+
const child_process = require('child_process');
|
2
|
+
const fs = require('fs');
|
3
|
+
const path = require('path');
|
4
|
+
|
5
|
+
const M={};
|
6
|
+
M.exec = function (comand) {
|
7
|
+
let promise = new Promise(function (reslove, reject) {
|
8
|
+
child_process.exec(comand, function (err, stdout, stderr) {
|
9
|
+
if (err || stderr) console.error(err, stderr);
|
10
|
+
reslove(stdout);
|
11
|
+
});
|
12
|
+
|
13
|
+
})
|
14
|
+
return promise;
|
15
|
+
}
|
16
|
+
|
17
|
+
M.copyFile= (relfile)=>{
|
18
|
+
let dir=path.parse(relfile).dir;
|
19
|
+
if (!fs.existsSync(dir)) {
|
20
|
+
fs.mkdirSync(dir);
|
21
|
+
}
|
22
|
+
let srcText= fs.readFileSync(path.join(CUR_DIR,relfile), "utf-8");
|
23
|
+
fs.writeFileSync(relfile,srcText);
|
24
|
+
return true;
|
25
|
+
}
|
26
|
+
const checkDirectory = function (src, dst, callback) {
|
27
|
+
fs.access(dst, fs.constants.F_OK, (err) => {
|
28
|
+
if (err) {
|
29
|
+
fs.mkdirSync(dst);
|
30
|
+
callback(src, dst);
|
31
|
+
} else {
|
32
|
+
callback(src, dst);
|
33
|
+
}
|
34
|
+
});
|
35
|
+
};
|
36
|
+
|
37
|
+
M.copyDir = function (src, dst) {
|
38
|
+
if (!fs.existsSync(dst)) {
|
39
|
+
fs.mkdirSync(dst);
|
40
|
+
}
|
41
|
+
let paths = fs.readdirSync(src); //同步读取当前目录
|
42
|
+
paths.forEach(function (path) {
|
43
|
+
let _src = src + '/' + path;
|
44
|
+
let _dst = dst + '/' + path;
|
45
|
+
fs.stat(_src, function (err, stats) { //stats 该对�? 包含文件属�?
|
46
|
+
if (err) throw err;
|
47
|
+
if (stats.isFile()) { //如果是个文件则拷�?
|
48
|
+
let readable = fs.createReadStream(_src);//创建读取�?
|
49
|
+
let writable = fs.createWriteStream(_dst);//创建写入�?
|
50
|
+
readable.pipe(writable);
|
51
|
+
} else if (stats.isDirectory()) { //是目录则 递归
|
52
|
+
checkDirectory(_src, _dst, M.copyDir);
|
53
|
+
}
|
54
|
+
});
|
55
|
+
});
|
56
|
+
}
|
57
|
+
|
58
|
+
module.exports = M;
|
@@ -0,0 +1 @@
|
|
1
|
+
console.log("demo111")
|
@@ -0,0 +1 @@
|
|
1
|
+
console.log("hello word")
|
@@ -0,0 +1,27 @@
|
|
1
|
+
const child_process = require('child_process');
|
2
|
+
var args = process.argv.splice(2)
|
3
|
+
const M={};
|
4
|
+
M.exec = function (comand) {
|
5
|
+
let promise = new Promise(function (reslove, reject) {
|
6
|
+
child_process.exec(comand, function (err, stdout, stderr) {
|
7
|
+
if (err || stderr) console.error(err, stderr);
|
8
|
+
reslove(stdout);
|
9
|
+
});
|
10
|
+
|
11
|
+
})
|
12
|
+
return promise;
|
13
|
+
}
|
14
|
+
M.getFileNameByUrl=function (url){
|
15
|
+
let split= url.split("/");
|
16
|
+
return split[split.length-1]
|
17
|
+
}
|
18
|
+
|
19
|
+
async function main(){
|
20
|
+
let npr_pluginsPath=process.argv[1].replaceAll("\\install\\index.js","");
|
21
|
+
let fileName=M.getFileNameByUrl(args[2]).replace(".js","");
|
22
|
+
await M.exec(`mkdir ${npr_pluginsPath}\\${fileName}`)
|
23
|
+
await M.exec(`curl ${args[2]} > ${npr_pluginsPath}\\${fileName}\\index.js`)
|
24
|
+
console.log(fileName+" install success!")
|
25
|
+
}
|
26
|
+
|
27
|
+
main()
|
@@ -0,0 +1,20 @@
|
|
1
|
+
const child_process = require('child_process');
|
2
|
+
|
3
|
+
const M={};
|
4
|
+
M.exec = function (comand) {
|
5
|
+
let promise = new Promise(function (reslove, reject) {
|
6
|
+
child_process.exec(comand, function (err, stdout, stderr) {
|
7
|
+
if (err || stderr) console.error(err, stderr);
|
8
|
+
reslove(stdout);
|
9
|
+
});
|
10
|
+
|
11
|
+
})
|
12
|
+
return promise;
|
13
|
+
}
|
14
|
+
|
15
|
+
async function main(){
|
16
|
+
let npr_pluginsPath=process.argv[1].replaceAll("\\list\\index.js","");
|
17
|
+
let r= await M.exec("dir /b "+ npr_pluginsPath);
|
18
|
+
console.log(r.replaceAll(".idea",""));
|
19
|
+
}
|
20
|
+
main()
|
@@ -0,0 +1 @@
|
|
1
|
+
demo����������
|
@@ -0,0 +1,99 @@
|
|
1
|
+
|
2
|
+
module breath_led(
|
3
|
+
input clk , //系统时钟 50MHz
|
4
|
+
input rst_n , //系统复位,低电平有效
|
5
|
+
output reg led //LED灯
|
6
|
+
);
|
7
|
+
|
8
|
+
|
9
|
+
parameter CNT_2US_MAX = 7'd100;
|
10
|
+
parameter CNT_2MS_MAX = 10'd1000;
|
11
|
+
parameter CNT_2S_MAX = 10'd1000;
|
12
|
+
|
13
|
+
//reg define
|
14
|
+
reg [6:0] cnt_2us=0;
|
15
|
+
reg [9:0] cnt_2ms=0;
|
16
|
+
reg [9:0] cnt_2s=0;
|
17
|
+
reg inc_dec_flag; //亮度递增/递减 0:递增 1:递减
|
18
|
+
|
19
|
+
wire add_cnt_2us;
|
20
|
+
wire end_cnt_2us;
|
21
|
+
wire add_cnt_2ms;
|
22
|
+
wire end_cnt_2ms;
|
23
|
+
wire add_cnt_2s;
|
24
|
+
wire end_cnt_2s;
|
25
|
+
|
26
|
+
|
27
|
+
assign add_cnt_2us = 1;
|
28
|
+
assign end_cnt_2us = add_cnt_2us && cnt_2us== CNT_2US_MAX-1;
|
29
|
+
|
30
|
+
assign add_cnt_2ms= end_cnt_2us;
|
31
|
+
assign end_cnt_2ms= add_cnt_2ms && cnt_2ms == CNT_2MS_MAX - 1;
|
32
|
+
|
33
|
+
assign add_cnt_2s= end_cnt_2ms;
|
34
|
+
assign end_cnt_2s= add_cnt_2s && cnt_2s == CNT_2S_MAX - 1;
|
35
|
+
|
36
|
+
|
37
|
+
//cnt_2us:计数2us
|
38
|
+
always @(posedge clk or negedge rst_n)begin
|
39
|
+
if(!rst_n)begin
|
40
|
+
cnt_2us <= 0;
|
41
|
+
end
|
42
|
+
else if(add_cnt_2us)begin
|
43
|
+
if(end_cnt_2us)
|
44
|
+
cnt_2us <= 0;
|
45
|
+
else
|
46
|
+
cnt_2us <= cnt_2us + 1;
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
//cnt_2ms:计数2ms
|
51
|
+
always@(posedge clk or negedge rst_n) begin
|
52
|
+
if(!rst_n)
|
53
|
+
cnt_2ms <= 10'b0;
|
54
|
+
else if(add_cnt_2ms) begin
|
55
|
+
if(end_cnt_2ms)
|
56
|
+
cnt_2ms <= 10'b0;
|
57
|
+
else
|
58
|
+
cnt_2ms <= cnt_2ms + 1;
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
//cnt_2s:计数2s
|
63
|
+
always@(posedge clk or negedge rst_n) begin
|
64
|
+
if(!rst_n)
|
65
|
+
cnt_2s <= 0;
|
66
|
+
else if(add_cnt_2s) begin
|
67
|
+
if(end_cnt_2s)
|
68
|
+
cnt_2s <= 10'b0;
|
69
|
+
else
|
70
|
+
cnt_2s <= cnt_2s + 1;
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
//inc_dec_flag为低电平,led灯由暗变亮,inc_dec_flag为高电平,led灯由亮变暗
|
80
|
+
always@(posedge clk or negedge rst_n) begin
|
81
|
+
if(!rst_n)
|
82
|
+
inc_dec_flag <= 1'b0;
|
83
|
+
else if(end_cnt_2s && end_cnt_2ms && end_cnt_2us)
|
84
|
+
inc_dec_flag <= ~inc_dec_flag;
|
85
|
+
else
|
86
|
+
inc_dec_flag <= inc_dec_flag;
|
87
|
+
end
|
88
|
+
|
89
|
+
//led:输出信号连接到外部的led灯
|
90
|
+
always@(posedge clk or negedge rst_n) begin
|
91
|
+
if(!rst_n)
|
92
|
+
led <= 1'b0;
|
93
|
+
else if((inc_dec_flag == 1'b1 && cnt_2ms >= cnt_2s) || (inc_dec_flag == 1'b0 && cnt_2ms <= cnt_2s))
|
94
|
+
led <= 1'b1;
|
95
|
+
else
|
96
|
+
led <= 1'b0;
|
97
|
+
end
|
98
|
+
|
99
|
+
endmodule
|
@@ -0,0 +1,39 @@
|
|
1
|
+
`timescale 1ns / 1ns
|
2
|
+
|
3
|
+
module tb;
|
4
|
+
|
5
|
+
// 10ns
|
6
|
+
parameter PERIOD = 10 ;
|
7
|
+
parameter CNT_2US_MAX = 7'd10 ;
|
8
|
+
parameter CNT_2MS_MAX = 10'd100;
|
9
|
+
parameter CNT_2S_MAX = 10'd100;
|
10
|
+
|
11
|
+
// breath_led Inputs
|
12
|
+
reg sys_clk = 0 ;
|
13
|
+
reg sys_rst_n = 0 ;
|
14
|
+
|
15
|
+
// breath_led Outputs
|
16
|
+
wire led ;
|
17
|
+
|
18
|
+
|
19
|
+
initial
|
20
|
+
begin
|
21
|
+
forever #(PERIOD/2) sys_clk=~sys_clk;
|
22
|
+
end
|
23
|
+
|
24
|
+
initial
|
25
|
+
begin
|
26
|
+
#(PERIOD*2) sys_rst_n = 1;
|
27
|
+
end
|
28
|
+
|
29
|
+
breath_led #(
|
30
|
+
.CNT_2US_MAX ( CNT_2US_MAX ),
|
31
|
+
.CNT_2MS_MAX ( CNT_2MS_MAX ),
|
32
|
+
.CNT_2S_MAX ( CNT_2S_MAX ))
|
33
|
+
u_breath_led (
|
34
|
+
.clk ( sys_clk ),
|
35
|
+
.rst_n ( sys_rst_n ),
|
36
|
+
.led ( led )
|
37
|
+
);
|
38
|
+
|
39
|
+
endmodule
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#setting parameter
|
2
|
+
work= work
|
3
|
+
output= ./
|
4
|
+
vsimbatch0= -do "run -all"
|
5
|
+
|
6
|
+
|
7
|
+
#commandbegin
|
8
|
+
all:compile vsim
|
9
|
+
lib:
|
10
|
+
echo "start compile for Questasim10.6c"
|
11
|
+
vlib $(work)
|
12
|
+
vmap work $(work)
|
13
|
+
vlog :
|
14
|
+
vlog -f filelist.f -l $(output)/compile.log
|
15
|
+
compile: lib vlog
|
16
|
+
run:
|
17
|
+
modelsim -do ./run.do
|
18
|
+
#make clean
|
19
|
+
clean:
|
20
|
+
del *.wlf
|
21
|
+
del vsim_stacktrace.vstf
|
22
|
+
del transcript
|
23
|
+
del compile.log
|
24
|
+
del modelsim.ini
|
25
|
+
rmdir /s /q work
|
@@ -0,0 +1 @@
|
|
1
|
+
"../*v"
|
@@ -0,0 +1,30 @@
|
|
1
|
+
`timescale 1ns / 1ns //���浥λ/���澫��
|
2
|
+
|
3
|
+
module tb();
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
reg key;
|
8
|
+
wire led;
|
9
|
+
|
10
|
+
|
11
|
+
initial begin
|
12
|
+
key <= 1'b1;
|
13
|
+
#2
|
14
|
+
key <= 1'b1;
|
15
|
+
#3
|
16
|
+
key <= 1'b0;
|
17
|
+
#2
|
18
|
+
key <= 1'b1;
|
19
|
+
#2
|
20
|
+
key <= 1'b0;
|
21
|
+
end
|
22
|
+
|
23
|
+
//����led�
|
24
|
+
led u_led(
|
25
|
+
.key (key),
|
26
|
+
.led (led)
|
27
|
+
);
|
28
|
+
|
29
|
+
endmodule
|
30
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
const path = require('path');
|
2
|
+
var args = process.argv.splice(2)
|
3
|
+
var CUR_DIR=path.parse(process.argv[1]).dir;
|
4
|
+
const M=require("../common/ming_node");
|
5
|
+
async function install(dir){
|
6
|
+
M.copyDir(path.join(CUR_DIR,dir),dir);
|
7
|
+
}
|
8
|
+
async function help(){
|
9
|
+
let r=await M.exec("dir "+CUR_DIR);
|
10
|
+
console.log(r);
|
11
|
+
}
|
12
|
+
|
13
|
+
function main(){
|
14
|
+
switch (args[2]){
|
15
|
+
case "": install("led");break;
|
16
|
+
case "help": help();break;
|
17
|
+
default:{
|
18
|
+
install(args[2]);break;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
}
|
23
|
+
|
24
|
+
main();
|
25
|
+
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module key_debounce(
|
2
|
+
input clk,
|
3
|
+
input rst_n,
|
4
|
+
input key_in ,
|
5
|
+
output reg key_out
|
6
|
+
);
|
7
|
+
|
8
|
+
//计算器值
|
9
|
+
parameter MAX_CNT =10 ;
|
10
|
+
reg[7:0] cnt=0;
|
11
|
+
wire add_cnt;
|
12
|
+
wire end_cnt;
|
13
|
+
reg key_d0; //将按键信号延迟一个时钟周期
|
14
|
+
reg key_d1; //将按键信号延迟两个时钟周期
|
15
|
+
|
16
|
+
always @ (posedge clk or negedge rst_n) begin
|
17
|
+
if(!rst_n) begin
|
18
|
+
key_d0 <= 1'b1;
|
19
|
+
key_d1 <= 1'b1;
|
20
|
+
end
|
21
|
+
else begin
|
22
|
+
key_d0 <= key_in;
|
23
|
+
key_d1 <= key_d0;
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
//第一段:同步时序always模块,格式化描述次态寄存器迁移到现态寄存器(不需更改)
|
29
|
+
always @(posedge clk or negedge rst_n)begin
|
30
|
+
if(!rst_n)begin
|
31
|
+
cnt <= 0;
|
32
|
+
end
|
33
|
+
else if(add_cnt)begin
|
34
|
+
if(end_cnt)
|
35
|
+
cnt <= 0;
|
36
|
+
else
|
37
|
+
cnt <= cnt + 1;
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
//第二段:设计转移条件
|
43
|
+
assign add_cnt = cnt<MAX_CNT;
|
44
|
+
assign end_cnt = (add_cnt && cnt== MAX_CNT-1)||key_d1!=key_d0 ;
|
45
|
+
|
46
|
+
|
47
|
+
//第三段:同步时序always模块,输出
|
48
|
+
always @(posedge clk or negedge rst_n)begin
|
49
|
+
if(rst_n==1'b0)
|
50
|
+
key_out<=1'b1;
|
51
|
+
else if(cnt==MAX_CNT-1)
|
52
|
+
key_out<=key_d1;
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
endmodule
|