From c9ece457e95b86db780a05405989578e51e93ee8 Mon Sep 17 00:00:00 2001 From: bacon Date: Mon, 15 Sep 2025 09:09:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0sim=20cdr=20clk=E7=9A=84?= =?UTF-8?q?=E7=94=9F=E6=88=90python=E6=96=87=E4=BB=B6,=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=9C=A8Makefile=E4=B8=AD=E5=8A=A8=E6=80=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=9B=B8=E4=BD=8D=E5=92=8C=E6=97=B6=E9=92=9F=E5=81=8F=E5=B7=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/SimCDRTb.v | 6 ++- tb/shinTest/gen_sim_cdr_clk.py | 52 +++++++++++++++++++ .../testcase_result/base_tc08_result.log | 2 +- 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100755 tb/shinTest/gen_sim_cdr_clk.py diff --git a/tb/shinTest/SimCDRTb.v b/tb/shinTest/SimCDRTb.v index b8541a0..aa3330c 100644 --- a/tb/shinTest/SimCDRTb.v +++ b/tb/shinTest/SimCDRTb.v @@ -25,7 +25,8 @@ module SimCDRTb( initial begin forever begin #8000000 clock <= ~clock; end end - + + /* generate for( genvar i = 0; i < 16; i = i + 1 ) begin initial begin @@ -38,6 +39,9 @@ module SimCDRTb( end end endgenerate + */ + + `include "simCdrClk.vh" reg [7:0] data; wire success; diff --git a/tb/shinTest/gen_sim_cdr_clk.py b/tb/shinTest/gen_sim_cdr_clk.py new file mode 100755 index 0000000..16bcea2 --- /dev/null +++ b/tb/shinTest/gen_sim_cdr_clk.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +#encoding=utf-8 +import argparse +from pyutils import * + + +def set_cdr_clk(v_ph, v_t): + ph = int(8 * 1000000 * (int(abs(v_ph))%360) / 360.0) + period = int(1000000 + v_t) + code_for_clk = __gen_clk(ph, period) + + genPkt = GenPkt() + genPkt.clean() + gen_file_def = "simCdrClk" + genPkt.addAfterExc(code_for_clk) + genPkt.gen("./generated/SimCDR/%s.vh"%(gen_file_def, ), 1) + +def __gen_clk(ph, period): + slv_code =( + "" + #"\tinitial begin\n" + #+"\t\tforever begin #%d clock%d <= ~clock%d; end\n"%(period * 8, clk, clk) + #+"\tend\n\n" + + +"\tgenerate\n" + +"\tfor( genvar i = 0; i < 16; i = i + 1 ) begin\n" + +"\t\tinitial begin\n" + + "\t\t\t//相位信息\n" + + "\t\t\t#%d\n"%(ph) + + "\t\t\tmultiCLK[i] = 0;\n" + + "\t\t\tfor( integer j = 0; j < i; j = j + 1 ) begin\n" + + "\t\t\t\t#%d\n"%(period, ) + + "\t\t\t\t;\n" + + "\t\t\tend\n" + + "\t\t\tforever begin #%d multiCLK[i] <= ~multiCLK[i]; end\n"%(period * 8, ) + +"\t\tend\n" + +"\tend\n" + +"\tendgenerate\n") + + return slv_code + +if __name__ == '__main__': + + parser = argparse.ArgumentParser() + + # 可选参数 + parser.add_argument("-c", "--clk", nargs=2, type=int, default=[0, 0], help="相位(度)、频率偏差ppm") + + args = parser.parse_args() + + set_cdr_clk(args.clk[0], args.clk[1]); + diff --git a/tb/shinTest/testcase_result/base_tc08_result.log b/tb/shinTest/testcase_result/base_tc08_result.log index f6578cd..e9b366e 100644 --- a/tb/shinTest/testcase_result/base_tc08_result.log +++ b/tb/shinTest/testcase_result/base_tc08_result.log @@ -16,7 +16,7 @@ 16'h0306 8'h00 16'h0002 8'h8c 8'h00 16'h1000 8'h00 16'h008c 8'h08 8'h80 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 16'h0020 8'h00 16'h0001 8'h01 -16'h0800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h3c 8'h31 8'h00 8'h80 8'h15 8'h05 8'h00 8'h00 8'hxx 8'h00 8'h00 8'h00 8'h00 8'h87 8'h87 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hf0 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h10 8'h80 8'h00 8'h00 8'h00 8'h01 +16'h0800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h3c 8'h31 8'h00 8'h80 8'h15 8'h05 8'h00 8'h00 8'hxx 8'h00 8'h00 8'h00 8'h00 8'h87 8'h87 8'h00 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hf0 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h10 8'h80 8'h00 8'h00 8'h00 8'h01 16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff 16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff 16'h007c 8'h00 16'h0002 8'h00 8'h81