1、数字集成电路验证方法学数字集成电路验证方法学浙江大学浙江大学ICLAB实验室实验室2016-12-26主要内容主要内容n验证的必要性验证的必要性n验证方法学介绍验证方法学介绍n验证工具介绍验证工具介绍n演示演示2共共91页页主要内容主要内容n验证的必要性验证的必要性n验证方法学介绍验证方法学介绍n验证工具介绍验证工具介绍n演示演示3共共91页页验证的必要性验证的必要性n验证的概念,验证与测试的区别。n经验表明,验证已经占到整个产品开发周期的70%以上,它已经成为复杂SOC(System on-Chip)开发中的重要壁垒。n制造、设计和验证能力之间存在鸿沟4共共91页页典型流程典型流程Verif
2、ication is not just very hard,it is very,very hard没有一个简单的工具可以解决你所有的验证没有一个简单的工具可以解决你所有的验证问题。问题。(VSIA,Virtual Socket Interface Alliance)5共共91页页主要内容主要内容n验证的必要性验证的必要性n验证方法学介绍验证方法学介绍n验证工具介绍验证工具介绍n演示演示6共共91页页验证方法学验证方法学n方法学:又称方法论,是一门学问采用的方法、规方法学:又称方法论,是一门学问采用的方法、规则与公理;一种特定的做法或一套做法。则与公理;一种特定的做法或一套做法。n验证方法学:
3、指完成验证过程中的一系列方法、技验证方法学:指完成验证过程中的一系列方法、技术和规范。术和规范。n 1.仿真技术仿真技术 n 2.静态技术静态技术n 3.物理验证物理验证7共共91页页仿真技术仿真技术n基于事件的仿真基于事件的仿真-任何一个输入的变化都被标记为事件,即任何一个输入的变化都被标记为事件,即常说的功能仿真,精度高,速度慢。比如常说的功能仿真,精度高,速度慢。比如Modelsim,VCS。n基于周期的仿真基于周期的仿真-单周期内只检查一次输入并计算设计的输单周期内只检查一次输入并计算设计的输出逻辑值。速度快,无时序、毛刺。比如出逻辑值。速度快,无时序、毛刺。比如Cyclone。n事务
4、级仿真事务级仿真-一堆事件的集合即为事务,即常说的验证平台。一堆事件的集合即为事务,即常说的验证平台。n软硬件协同验证软硬件协同验证-需要专门的硬件,成本高需要专门的硬件,成本高。8共共91页页验证方法比较验证方法比较EDA验证软硬件协同验证FPGA验证编译速度很快较快慢运行速度慢较快很快环境搭建难度简单难很难环境重用度高较高低问题定位能力很强很强低成本低高较低9共共91页页传统验证系统传统验证系统nDUT:Design Under Testn适用于基于事适用于基于事件的仿真件的仿真和和基基于周期的仿真。于周期的仿真。n适用于简单的适用于简单的设计。设计。缺点:缺点:1.可扩展性差2.可重用性
5、差10共共91页页层次化的验证系统层次化的验证系统适用于事务级仿真适用于事务级仿真优点:优点:1.可扩展性好2.可重用性好11共共91页页为什么要用事务级仿真?基于事件的仿真基于事件的仿真事务级仿真事务级仿真Testbench代码可读性,可代码可读性,可维护性维护性差差强强仿真速度仿真速度慢慢快快Testbench结构结构DUT复杂时,结构混乱复杂时,结构混乱DUT复杂时,结构清晰复杂时,结构清晰Testbench代码量代码量DUT简单时,代码量尚可简单时,代码量尚可DUT复杂时,代码量巨大复杂时,代码量巨大DUT简单时,代码量略多简单时,代码量略多DUT复杂时,代码量较少复杂时,代码量较少与
6、待测设计联系程度与待测设计联系程度非常紧密非常紧密行为级与行为级与DUT联系紧密联系紧密事务级具有自身独立性事务级具有自身独立性可重用性可重用性无无强强抽象层次抽象层次无无有有参考模型参考模型无无有有基于事件的仿真与事务级仿真的比较基于事件的仿真与事务级仿真的比较12共共91页页事务级仿真事务级仿真nRVM:Reference Verification Methodology,Synopsys公司。nVMM:Verification Methodology Manual,ARM公司和 Synopsys公司。nAVM:Advanced Verification Methodology,Mento
7、r公司。nOVM:Open Verification Methodology,Cadence和Mentor公司。nUVM:Universal Verification Methodology,Cadence、Mentor和Synopsys公司。13共共91页页为什么选用OVM?验证方法学验证方法学侧重点侧重点EDA验证工具验证工具支持的验证语言支持的验证语言基类库是否基类库是否开源开源RVM层次化验证层次化验证VCSOpenVera否否VMM层次化验证层次化验证VCSSystemVerilog是是AVM层次化验证层次化验证QuestasimSystemC/SystemVerilog是是OVM开
8、源和不同开源和不同仿真器之间仿真器之间的透明性的透明性支持不同验证支持不同验证工具工具支持支持SystemVerilog等多种语言等多种语言是是UVM开源和快速开源和快速入门入门QuestasimNC-verilogVCS支持支持SystemVerilog等多种语言等多种语言是是各种验证方法学比较各种验证方法学比较14共共91页页OVM介绍介绍nOVM是一种基于SystemVerilog的验证方法或者策略,已经实现了一个基本的层次化验证平台,大大简化验证工程师的工作量。nOVM可以验证HDL代码或者网表文件nOVM特点:1.开放性:支持所有验证工具 2.开源:OVM库都是基于SystemVer
9、ilog实现的,可以在网上下载。3.可靠性:两大公司共同开发维护15共共91页页OVM结构结构novm_envnovm_sequencernovm_agentnovm_scoreboardnovm_drivernovm_monitor16共共91页页SystemVerilog介绍介绍nSystemVerilog结合了结合了Verilog和和C+的概念的概念,具有如下新功能:,具有如下新功能:n1.面向对象编程面向对象编程(OOP)、n2.随机约束随机约束(Constraint Random)、n3.断言断言(Assertion)、n4.功能覆盖率功能覆盖率(Functional Coverag
10、e)。17共共91页页nOOP:Object-oriented programmingn对象:对象:对象(Object)是一个现实实体的抽象,对象可被认为是一个把数据(属性)和程序(方法)封装在一起的实体,这个程序产生该对象的动作,属性反映了对象当前的状态。n面向对象编程面向对象编程:主要是将我们实际生活中的对象经过抽象,将它定义成为一个类,通过类的属性和方法来模拟生活中的这个对象。这样使得程序更容易结构化、抽象起来更方便。n传统的编程结构和设计方法以过程为中心进行功能组合,代码的扩充和复用能力很差。对象是对现实世界实体的模拟,因面能更容易地理解需求,即使用户和分析者之间具有不同的教育背景和工
11、作特点,也可很好地沟通。SystemVerilog介绍介绍-面向对象编程面向对象编程18共共91页页n类:定义实物的抽象特点,包含方法和属性。n对象:类的实例。n方法:类的行为。n继承:子类包含类的特性。SystemVerilog介绍介绍-面向对象编程面向对象编程19共共91页页CRT:Constraint Random Test class my_transaction extends ovm_transaction;rand int data_i;constraint c_data_i data_i =0;data_i 262144;endclassmy_transaction tr=ne
12、w();tr.randomize();/tr.data_i大于0小于262144SystemVerilog介绍介绍-随机约束随机约束20共共91页页SystemVerilog介绍介绍-随机约束随机约束class transcation;rand bit 1:0 src;rand bit 31:0 data;bit 31:0 low,high;constraint cons src dist 0:=40,1:3:=60;data inside low:high;endclass21共共91页页SystemVerilog介绍介绍-断言断言断言断言:属于验证方法中的一种,是对设计属性(行为)的描述,
13、如果一个属性不是我们期望的那样,那么断言就会失败。assertions与verilog相比:1.verilog是一种过程性语言。它的设计目的是硬件描述,它可以很好的控制时序,但是描述复杂的时序关系,代码较为冗长。2.assertions是一种描述性语言,设计目的为仿真验证,可以有很多内嵌的函数来测试特定的时序关系和自动收集覆盖率数据。22共共91页页SystemVerilog介绍介绍-断言断言Assertion 示例示例property p10;(posedge clock)(io.data_check_o=data_out_design_for_check-2);endpropertya10
14、:assert property(p10);23共共91页页SystemVerilog介绍介绍-断言断言property pr1;(posedge clock)start|-req#2(gnt=1&req=0);endpropertyA_pr1:assert property(pr1);24共共91页页SystemVerilog介绍介绍-功能覆盖率功能覆盖率n功能覆盖率功能覆盖率:衡量哪些设计特征已经被程序验证过的一个衡量哪些设计特征已经被程序验证过的一个指标指标n代码覆盖率代码覆盖率 1.语句语句覆盖覆盖(StatementCoverage)2.判定覆盖判定覆盖(DecisionCovera
15、ge)3.条件覆盖条件覆盖(ConditionCoverage)4.路径覆盖路径覆盖(PathCoverage)25共共91页页语句覆盖语句覆盖n语句语句覆盖覆盖(StatementCoverage):度量被测代码中每个可执行语句是否被执行到了。int foo(int a,int b)return a/b;TeseCase:a=10,b=5 语句覆盖率:100%代码的代码的bug:b=026共共91页页判定覆盖判定覆盖&条件覆盖条件覆盖判定判定覆盖覆盖(DecisionCoverage):度量程序中每一个判定的分支是否都被测试到了。条件覆盖条件覆盖(ConditionCoverage):度量判
16、定中的每个子表达式结果true和false是否被测试到了。int foo(int a,int b)if(a 10|b 10)/判定 return 0;/分支一 else return 1;/分支二 TestCaes1:a=5,b 15覆盖了分支一TestCaes2:a=15,b=15 覆盖了分支二TestCase1:a=5,b=5 true,trueTestCase2:a=15,b=15 false,falseTestCase1:a=5,b=15 true,false 分支一TestCase2:a=15,b=5 false,true 分支一判定覆盖率:100%,条件覆盖100%条件覆盖率:10
17、0%判定覆盖率:100%条件覆盖率:100%,判定覆盖100%27共共91页页路径覆盖路径覆盖路径覆盖路径覆盖(PathCoverage):度量了是否函数的每一个分支都被执行了。int foo(int a,int b)int nReturn=0;if(a 10)/分支一 nReturn+=1;if(b=0;data_i 262144;virtual function void randomize_();data_i =$random&18h3ffff;endfunctionovm_object_utils_begin(my_transaction)/在程序中 ovm_field_int(dat
18、a_i,OVM_ALL_ON+OVM_DEC)ovm_object_utils_end endclass:my_transaction 50共共91页页OVM平台平台驱动器驱动器 class my_driver extends ovm_driver;/ovm_component_utils(my_driver)/注册本类,这个宏的结尾没有符号;virtual io_if v_io;/装载虚拟接口 ovm_get_port#(my_transaction)get_port;/装载与激励发生器通信的通道接口:function new(string name,ovm_component parent
19、);super.new(name,parent);/建议验证程序中可写一些ovm_report_info的语句供提示用:ovm_report_info(,Called my_driver:new);/在测试结果显示此函数被调用 endfunction:new 51共共91页页function void build;super.build();ovm_report_info(,Called my_driver:build);get_port=new(get_port,this);/初始化 endfunction:build virtual task run;ovm_report_info(,Ca
20、lled my_driver:run);forever begin my_transaction tx;#1600 get_port.get(tx);/从通道中取一个事件 ovm_report_info(,$psprintf(data_i=%2h,tx.data_i);v_io.dut_if.data_i =tx.data_i;end endtask:run endclass:my_driver52共共91页页OVM平台平台验证环境验证环境 class my_env extends ovm_env;/ovm_component_utils(my_env)/注册本类 ovm_random_sti
21、mulus#(my_transaction)env_stimulus;/装载激励器 tlm_fifo#(my_transaction)env_fifo;/装载通道 my_driver env_driver;/装载驱动器 function new(string name=my_env,ovm_component parent=null);super.new(name,parent);ovm_report_info(,Called my_env:new);endfunction:new 53共共91页页virtual function void build;super.build();ovm_re
22、port_info(,Called my_env:build);env_stimulus=new(env_stimulus,this);/初始化激励器 env_fifo =new(env_fifo,this);/初始化通道 env_driver =new(env.driver,this);/初始化驱动器 endfunction:build virtual function void connect;/设定连接关系 ovm_report_info(,Called my_env:connect);env_stimulus.blocking_put_port.connect(env_fifo.put
23、_export);/激励器侧接口-放事件 env_driver.get_port.connect(env_fifo.get_export);/驱动器侧接口-取事件 endfunction:connect54共共91页页virtual function void configure;/ovm_report_info(,Called my_env:configure);env_stimulus.set_report_id_action(stimulus generation,OVM_NO_ACTION);/限制显示信息 endfunction:configure/你可删除上一行,看看有什么变化?t
24、ask run();ovm_report_info(,Called my_env:run);endtask:run virtual function void report;ovm_report_info(,Called my_env:report);endfunction:report /在运行下面的run_test()函数时,以上函数将自动依次运行 endclass:my_env55共共91页页module check(io_if.check_if io,input clock,rst,en,input 17:0 data_out_design_for_check);wire 17:0 h
25、cic_out;/参考模型Hcic_full Hcic_full(clock,en,rst,io.data_i,hcic_out,);assign io.data_check_o=hcic_out;property p10;(posedge clock)(io.data_check_o=data_out_design_for_check-2)|io.data_check_o=0;endpropertya10:assert property(p10);endmoduleOVM平台平台比较器比较器56共共91页页timescale 1ns/10ps module top;import ovm_pk
26、g:*;import my_pkg:*;parameter clock_cycle=100;bit clock;bit rst;bit rst_check;io_if my_io();/装载接口 dut dut(.io(my_io),.clock(clock),.rst(rst),.en(rst_check);/装载DUT check check(.io(my_io),.clock(clock),.rst(rst),.en(rst_check),.data_out_design_for_check(my_io.dut_if.data_o);/建议在验证程序顶级模块中一般采用继承ovm_test
27、的类包装继承 ovm_env的类 OVM平台平台顶层模块顶层模块57共共91页页 class my_test extends ovm_test;ovm_component_utils(my_test)/注册本类 my_env top_env;/装载环境-top_env function new(string name=my_test,ovm_component parent=null);super.new(name,parent);ovm_report_info(,Called my_test:new);endfunction:new virtual function void build;s
28、uper.build();ovm_report_info(,Called my_test:build);top_env=new();/初始化 /建议在验证程序中可设定看门狗 set_global_timeout(1000000us);endfunction:build 58共共91页页virtual function void connect;ovm_report_info(,Called my_test:connect);top_env.env_driver.v_io=my_io;/连接虚拟接口到驱动器的物理接口 endfunction:connect task run;my_transac
29、tion tx;tx=new();ovm_report_info(,Called my_test:run);top_env.env_stimulus.generate_stimulus(tx,2000000);/激励器产生20个事件 endtask:run endclass:my_test59共共91页页initial begin run_test(“my_test”);clock=0;rst=0;rst_check=0;#(32*clock_cycle)rst=1;end always#(clock_cycle/2)clock=clock;initial begin$fsdbDumpfile
30、(top.fsdb);$fsdbDumpSVA;$fsdbDumpvars(0,top,+all);end endmodule:top60共共91页页启动验证工具启动验证工具n利用mentor的questasim,界面和操作类似于modelsimn环境变量source/opt/demo/questasim.envn启动命令vsim&61共共91页页脚本方式完成验证脚本方式完成验证nvlib dac_hcic /创建库nvlog+acc-f./rtl/ovm_rtl/compile_questa_sv.f-work dac_hcic-sv+cover /编译整个验证平台nvsim -c dac_
31、hcic.top-sv_seed 100-coverage-assertcover-assertdebug-sva-voptargs=“+acc”-pli /opt/springsoft/verdi/share/PLI/MODELSIM/LINUX/novas_fli.so/启动仿真nview assertions/查看断言nrun-all/开始运行nquit-sim/结束仿真62共共91页页compile_questa_sv.fn+incdir+/home1t/opt/questasim/questasim/verilog_src/ovm-2.1.2/srcn/home1t/opt/ques
32、tasim/questasim/verilog_src/ovm-2.1.2/src/ovm_pkg.sv n+incdir+/home/liuxp/dac/rtl/ovm_rtln+incdir+/home/liuxp/dac/rtl/dac_balise/dac_haf_cicn/home/liuxp/dac/rtl/ovm_rtl/ovm_start.sv63共共91页页结果查看结果查看断言结果查看断言结果查看代码覆盖率查看代码覆盖率查看64共共91页页断言结果查看Questasim下65共共91页页代码断言结果查看Verdi下Verdi(另外一个软件,专门用作波形查看和调试)下查看断言结
33、果更加直观,箭头朝上就表示断言通过,朝下表示断言失败。66共共91页页代码覆盖率查看67共共91页页代码覆盖率查看68共共91页页n动态时序仿真:利用仿真器(Modelsim)和延迟文件(SDF文件),通过反标节点延迟信息来仿真。n需要的文件:1.布局布线完的网表文件2.布局布线后生成的SDF文件3.标准单元库和IO库的Verilog模型文件4.Testbench文件动态时序仿真(后仿)动态时序仿真(后仿)69共共91页页1.修改Testbench,添加布局布线完导出的SDF文件2.创建新的工程3.添加修改好的Testbench文件top_tb.v4.添加布局布线完导出的网表文件fsk_lay
34、out.sv5.添加标准单元的Verilog模型文件/home/smic/smic_40/SCC40NLL_HS_RVT_V0p1a/verilog/SCC40NLL_HS_RVT_V0p1.v6.添加输入输出IO的Verilog模型文件/home/smic/smic_40/SP40NLLD2RN_3P3V_V0p2/verilog/SP40NLLD2RNP_3P3V_V0p1.v7.编译及仿真动态时序仿真(后仿)步骤动态时序仿真(后仿)步骤70共共91页页Testbench中添加中添加SDF文件文件在Testbench中新建一个initial 块,通过系统函数$sdf_annotate()来
35、读入SDF文件,并反标到网表每个节点上。具体代码如下:initial begin$sdf_annotate(“/home/liuxp/class/astro/SDF/top_pad.sdf”,top_tb.top_pad);endTestbench 模块名称实例化的顶层模块名称71共共91页页后仿真波形后仿真波形整体功能波形:延迟信息:72共共91页页静态验证工具静态验证工具n静态时序分析静态时序分析Prime Timen形式验证形式验证-Formality73共共91页页静态时序分析静态时序分析PrimeTimenPrimeTime是Synopsys的静态时序分析软件,常被用来分析大规模、同
36、步、数字ASIC。nPrimeTime适用于门级的电路设计。1.逻辑综合后网表 2.自动布局布线后网表74共共91页页PrimeTime流程流程 1.设置查找和链接路径;2.读入并链接所要分析的设计;3.设置PVT和线上负载模型;4.设置基本的时序约束;5.检查所设置的约束以及该设计的结构。75共共91页页PrimeTime工具启动工具启动nsource/opt/demo/synopsys.envnpt_shell(无图形界面)(无图形界面)或者或者nprimetime&76共共91页页命令输入区命令输入区77共共91页页PrimeTime脚本脚本 source pt.scrset lib_p
37、ath/home/smic/smic_65/SCC65NLL_HS_RVT_V1p1aset smic_stdlib_path$lib_path/synopsys/1.2v/set smic_diolib_path/home/smic/smic_65/SP65NLLD2RP_OV3_TTM_V0p2a/syn/3p3v/set smic_aiolib_path/home/smic/smic_65/SP65NLLD2RP_OV3_ANALOG_TTM_V0p2a/syn/3p3v/set smic_stdsymlib_path$lib_path/symbol/set smic_iosymlib_
38、path$lib_path/symbol/set search_path$smic_stdlib_path$smic_aiolib_path$smic_diolib_path$smic_stdsymlib_path$smic_iosymlib_path“set link_library*scc65nll_hs_rvt_ss_v1p08_125c_basic.db scc65nll_hs_rvt_ff_v1p32_-40c_basic.db SP65NLLD2RP_OV3_TTM_V0p2_ss_V1p08_125C.db SP65NLLD2RP_OV3_TTM_V0p2_ff_V1p32_-4
39、0C.db“set symbol_library list SCC65NLL_HS_RVT_V1p1.sdbremove_design allread_verilog./syn/netlist/dac.sv“link_design daccurrent_design daclist_designsreport_cell78共共91页页PrimeTime脚本脚本 source pt.scrset_operating_conditions -min_library scc65nll_hs_rvt_ff_v1p32_-40c_basic-min ff_v1p32_-40c-max_library s
40、cc65nll_hs_rvt_ss_v1p08_125c_basic-max ss_v1p08_125c-analysis_type bc_wc/set_operating_conditions -library scc65nll_hs_rvt_ff_v1p32_-40c_basic /ff_v1p32_-40c create_clock-name clk-period 300-waveform list 0 150 clk_in_pad set_clock_latency 2.0 all_clocksset_clock_uncertainty-setup 2.0 clkset_clock_t
41、ransition 2 get_clocks clkset_drive 0 list clk clk_in_pad set_load 5 all_outputsset_input_delay 5-clock clk-max remove_from_collection all_inputs get_ports clk_in_pad set_output_delay 5-clock clk-max all_outputsreport_constraintreport_timing79共共91页页形式验证形式验证-Formalityn所谓形式验证,就是通过比较两个设计在逻辑功能是否等同的方法来验证
42、电路的功能。nFormality是Synopsys公司的产品,与PrimeTime结合起来使用。80共共91页页形式验证形式验证-FormalityLogicConeBBBBInputsOutputs from RegistersPrimary Input PortsOutputs from Black BoxesCompare PointsInputs to RegistersPrimary Output PortsInputs to Black BoxesCompare PointA design contains Logic Cones and Compare Points81共共91页
43、页形式验证形式验证-FormalityD QBBDetermining Compare PointsnBreaks the two logic circuits up into logic cones:qEnd points(compare points)are primary outputs,registers,and black box inputs82共共91页页形式验证形式验证-FormalityD QBBReference DesignD QBBImplementation DesignCPCPCPnCompare points are then aligned:qThis proc
44、ess is called“compare point matching”qEnd points of logic cones(compare points)are primary outputs,registers,and black box inputs83共共91页页形式验证形式验证-FormalityVerify DesignnFor each matched pair of compare points Formality tries to:EitherqConfirms same response for all possible input combinations.qMarks
45、 point as“passed”OrqFinds a“counter example”that shows different responseqMarks point as“failed”84共共91页页Formality流程流程1.添加工艺库2.创建container3.读入参考库文件4.读入设计文件5.定义参考库和设计库6.连接7.开始比较85共共91页页Formality工具启动工具启动nsource/opt/demo/synopsys.envnfm_shell(无图形界面)(无图形界面)或者或者formality&86共共91页页命令输入区命令输入区87共共91页页Formalit
46、y source fm.scrset lib_path/home/smic/smic_65/SCC65NLL_HS_RVT_V1p1aset smic_stdlib_path$lib_path/synopsys/1.2v/set smic_diolib_path/home/smic/smic_65/SP65NLLD2RP_OV3_TTM_V0p2a/syn/3p3v/set smic_aiolib_path/home/smic/smic_65/SP65NLLD2RP_OV3_ANALOG_TTM_V0p2a/syn/3p3v/set search_path“$smic_stdlib_path$
47、smic_aiolib_path$smic_diolib_path create_container refread_db list scc65nll_hs_rvt_ss_v1p08_125c_basic.db SP65NLLD2RP_OV3_TTM_V0p2_ss_V1p08_125C.db SP65NLLD2RP_OV3_ANALOG_TTM_V0p1_ss_v1p08_125C.dbread_verilog./rtl/dac_haf_cic/top.v./rtl/dac_haf_cic/filter.v./rtl/dac_haf_cic/en.v./rtl/dac_haf_cic/haf
48、1_new.v./rtl/dac_haf_cic/haf2_new.v./rtl/dac_haf_cic/Hcic.v./rtl/dac_haf_cic/modulator.v./rtl/dac_haf_cic/DWA.v88共共91页页Formality source fm.scrset_reference_design ref:/WORK/total link$refcreate_container icmpread_verilog -netlist./syn/netlist/dac.sv set_implementation_design icmp:/WORK/totalset_top
49、icmp:/WORK/total save_session-replace fm_shell_session exitformality&restore_session fm_shell_session.fssverifyreport_failing_pointsdiagnose89共共91页页作业作业后仿布局布线导出的网表文件(带SDF文件)。90共共91页页输入一个输入一个564KHz的键控信号,(这里为了简化描述,的键控信号,(这里为了简化描述,使用使用564 KHz来描述键控信号的速率,正常情况下是来描述键控信号的速率,正常情况下是用用kbps。)。)当键控信号为当键控信号为1时,模块产生并输出时,模块产生并输出4.5MHz左右的信号左右的信号(8倍倍)当键控信号为当键控信号为0时,模块产生并输出时,模块产生并输出3.9MHz左右的信号左右的信号(7倍倍)附录附录-FSK电路基本功能电路基本功能91共91页
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。