diff --git a/Cargo.lock b/Cargo.lock index d6cd34b..4542a3c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1416,6 +1416,7 @@ dependencies = [ name = "sv-parser" version = "0.13.3" dependencies = [ + "log", "nom", "nom-greedyerror", "sv-parser-error", diff --git a/copy_server_to_ide.sh b/copy_server_to_ide.sh index 5b70211..31b6ba7 100755 --- a/copy_server_to_ide.sh +++ b/copy_server_to_ide.sh @@ -1,7 +1,7 @@ #!/bin/bash -cargo test --release --package digital-lsp --lib -- core::primitive_parser::tests::gen_primitive_bin --exact --show-output --nocapture -mkdir -p /home/dide/project/Digital-IDE/resources/dide-lsp/static/xilinx -cp target/primitive.bin /home/dide/project/Digital-IDE/resources/dide-lsp/static/xilinx -#cargo build --release -#cp target/release/digital-lsp /home/dide/project/Digital-IDE/resources/dide-lsp/server/0.4.0/ +#cargo test --release --package digital-lsp --lib -- core::primitive_parser::tests::gen_primitive_bin --exact --show-output --nocapture +#mkdir -p /home/dide/project/Digital-IDE/resources/dide-lsp/static/xilinx +#cp target/primitive.bin /home/dide/project/Digital-IDE/resources/dide-lsp/static/xilinx +cargo build --release +cp target/release/digital-lsp /home/dide/project/Digital-IDE/resources/dide-lsp/server/0.4.0/ diff --git a/src/completion/sys_tasks.rs b/src/completion/sys_tasks.rs index b3a7f17..a171035 100644 --- a/src/completion/sys_tasks.rs +++ b/src/completion/sys_tasks.rs @@ -34,8 +34,9 @@ pub const VLOG_CONTINUOUS_MONITORING_TASKS: &[(&str, &str, &str)] = &[ ("monitorb", "$monitorb($1);", "监控变量并在变量变化时以二进制格式打印。\n```verilog\n$monitorb(data);\n```"), ("monitoro", "$monitoro($1);", "监控变量并在变量变化时以八进制格式打印。\n```verilog\n$monitoro(data);\n```"), ("monitorh", "$monitorh($1);", "监控变量并在变量变化时以十六进制格式打印。\n```verilog\n$monitorh(data);\n```"), - ("monitoron", "$monitoron();", "启用监控任务。\n```verilog\n$monitoron();\n```"), - ("monitoroff", "$monitoroff();", "关闭监控任务。\n```verilog\n$monitoroff();\n```"), + // monitoron和monitoroff与后面的dumpon和dumpoff等保持一致,不带无参括号 + ("monitoron", "$monitoron;", "启用监控任务。\n```verilog\n$monitoron();\n```"), + ("monitoroff", "$monitoroff;", "关闭监控任务。\n```verilog\n$monitoroff();\n```"), ]; /// File input-output system tasks and functions ieee1364 17.2.1 @@ -87,12 +88,31 @@ pub const VLOG_FILE_READING_TASKS: &[(&str, &str, &str)] = &[ ("fgetc", "$fgetc($1);", "从文件中读取一个字符。\n```verilog\ninteger char;\nchar = $fgetc(file_handle);\n```"), ("ungetc", "$ungetc($1, $2);", "将字符推回到文件流中。\n```verilog\n$ungetc(char, file_handle);\n```"), - // 17.2.4.2 Reading a line at a time - ("fgets", "$fgets($1, $2, $3);", "从文件中读取一行数据。\n```verilog\nstring line;\n$fgets(line, file_handle);\n```"), + // 17.2.4.2 Reading a line at a time、 + // 只有两个参数 char_num = $fgets(fbuf,fd); + ("fgets", "$fgets($1, $2);", "从文件中读取一行数据。\n```verilog\nstring line;\n$fgets(line, file_handle);\n```"), // 17.2.4.3 Reading formatted data ("fscanf", "$fscanf($1, $2, $3);", "从文件中读取格式化数据。\n```verilog\ninteger value;\n$fscanf(file_handle, \"%d\", value);\n```"), ("sscanf", "$sscanf($1, $2, $3);", "从字符串中读取格式化数据。\n```verilog\ninteger value;\n$sscanf(\"123\", \"%d\", value);\n```"), + + // 17.2.4.4 Reading binary data + // 漏了一个 + // integer ; + // = $fread(); + // = $fread(, ); + // = $fread(, , ); + // = $fread(, , ); + // integer:整型数值,返回本次$fread 读取的真实字节数量,当返回值为0 ,表示错误读取或者文件结束。 + // store:将二进制文件中的数据读取到寄存器或者二维数组中。 + // file_desc:为打开的文件句柄 + // start: 为二维数组的起始地址 + // count: 从起始地址开始, 写入二维数组的数量。 + // fread + // integer fd; + // reg [7:0] fbuf [3:0]; + // char_num = $fread(fbuf, fd, 0, 4); //读取二进制文件中的数据,存放到fbuf[0],fbuf[1],fbuf[2],fbuf[3] + // char_num = $fread(fbuf, fd, 1, 2); //读取二进制文件中的数据,存放到fbuf[1],fbuf[2] ]; /// File positioning tasks ieee1364 17.2.5 @@ -112,6 +132,9 @@ pub const VLOG_FLUSHING_OUTPUT_TASKS: &[(&str, &str, &str)] = &[ /// I/O error status tasks ieee1364 17.2.7 /// (&str, &str, &str): (label, snippet, description) pub const VLOG_IO_ERROR_STATUS_TASKS: &[(&str, &str, &str)] = &[ + // err = $ferror(fd, str) ; str会提供更加详细的错误信息 + // err 返回非零值表示错误, str 返回非零值存储错误类型, 官方建议 str 长度为 640bit 位宽 + // 假如打开一个不存在的文件,则err会得到00000002,str则会得到No such file or directory ("ferror", "$ferror($1);", "检查文件读写错误。\n```verilog\ninteger error;\nerror = $ferror(file_handle);\n```"), ]; @@ -131,6 +154,9 @@ pub const VLOG_LOADING_MEMORY_TASKS: &[(&str, &str, &str)] = &[ /// Loading timing data from an SDF file tasks ieee1364 17.2.10 /// (&str, &str, &str): (label, snippet, description) pub const VLOG_LOADING_TIMING_TASKS: &[(&str, &str, &str)] = &[ + // $sdf_annotate ("sdf_file"[, module_instance][,"sdf_configfile"][,"sdf_logfile"][,"mtm_spec"][,"scale_factors"][,"scale_type"]); + // 最简单的方式可以只需要两个参数,大概就这样就好? + // $sdf_annotate(“ring_oscillator.sdf”,ring_oscillator); ("sdf_annotate", "$sdf_annotate($1, $2);", "从 SDF 文件加载时序数据并应用于模块实例。\n```verilog\n$sdf_annotate(\"timing.sdf\", top_module);\n```"), ]; @@ -239,6 +265,7 @@ pub const VLOG_CONVERSION_FUNCTIONS_TASKS: &[(&str, &str, &str)] = &[ ("rtoi", "$rtoi($1);", "将实数转换为整数。\n```verilog\ninteger integer_value;\ninteger_value = $rtoi(real_value);\n```"), ("bitstoreal", "$bitstoreal($1);", "将 64 位位向量转换为实数。\n```verilog\nreal real_value;\nreal_value = $bitstoreal(bit_vector);\n```"), ("realtobits", "$realtobits($1);", "将实数转换为 64 位位向量。\n```verilog\nreg [63:0] bit_vector;\nbit_vector = $realtobits(real_value);\n```"), + // bitstoshortreal和shortrealtobits是sv中的task ("bitstoshortreal", "$bitstoshortreal($1);", "将 32 位位向量转换为短实数。\n```verilog\nshortreal shortreal_value;\nshortreal_value = $bitstoshortreal(bit_vector);\n```"), ("shortrealtobits", "$shortrealtobits($1);", "将短实数转换为 32 位位向量。\n```verilog\nreg [31:0] bit_vector;\nbit_vector = $shortrealtobits(shortreal_value);\n```"), ]; @@ -346,6 +373,16 @@ pub const VLOG_DUMPFLUSH_TASKS: &[(&str, &str, &str)] = &[ ("dumpflush", "$dumpflush;", "刷新波形转储文件,确保所有数据都写入文件。\n```verilog\n$dumpflush;\n```"), ]; +// 18.3 Creating extended VCD File +// 主要比传统的dump多了一个指定文件名的功能 +// dumpports $dumpports ( scope_list , file_pathname ) ; +// dumpportsoff $dumpportsoff ( file_pathname ) ; +// dumpportson $dumpportson ( file_pathname ) ; +// dumpportslimit $dumpportslimit ( filesize , file_pathname ) ; +// dumpportsflush $dumpportsflush ( file_pathname ) ; +// vcdclose $vcdclose +// vcdclose的信息比较少,文档中的sample是$vcdclose #13000 $end,vcdclose_task ::= $vcdclose final_simulation_time $end,感觉应该是要和$end连用的 + /// FSDB related tasks /// (&str, &str, &str): (label, snippet, description) pub const VLOG_FSDB_TASKS: &[(&str, &str, &str)] = &[