标签 EDA&虚拟机 下的文章 - 我的学记|刘航宇的博客
首页
📊归档
⏳时光机
📬留言
🐾友链
资助名单
推荐
🎓843课程班
🎵音乐
🏞️壁纸
搜 索
1
【NPN/PNP三极管】放大电路饱和失真和截止失真的区别
12,710 阅读
2
论文写作中如何把word里面所有数字和字母替换为新罗马字体
7,154 阅读
3
【高数】形心计算公式讲解大全
6,637 阅读
4
【1】基于STM32CubeMX-STM32GPIO端口开发
5,148 阅读
5
如何判断运放是工作在线性区还是非线性区
4,992 阅读
🌻微语&随笔
励志美文
我的随笔
写作办公
📖电子&通信
嵌入式&系统
通信&信息处理
编程&脚本笔记
🗜️IC&系统
FPGA&ASIC
VLSI&IC验证
EDA&虚拟机
💻电子&计算机
IP&SOC设计
机器学习
软硬件算法
登录
搜 索
标签搜索
嵌入式
ASIC/FPGA
VLSI
SOC设计
机器学习
天线设计
C/C++
EDA&虚拟机
软件算法
小实验
信号处理
电子线路
通信&射频
随笔
笔试面试
硬件算法
Verilog
软件无线电
Python
DL/ML
刘航宇
嵌入式系统&数字IC爱好者博客
累计撰写
302
篇文章
累计收到
527
条评论
首页
栏目
🌻微语&随笔
励志美文
我的随笔
写作办公
📖电子&通信
嵌入式&系统
通信&信息处理
编程&脚本笔记
🗜️IC&系统
FPGA&ASIC
VLSI&IC验证
EDA&虚拟机
💻电子&计算机
IP&SOC设计
机器学习
软硬件算法
页面
📊归档
⏳时光机
📬留言
🐾友链
资助名单
推荐
🎓843课程班
🎵音乐
🏞️壁纸
用户登录
登录
EDA&虚拟机(共6篇)
找到
6
篇与
EDA&虚拟机
相关的结果
2023-07-27
一张图看懂数字IC设计前后端全流程(DC ICC PT的关系)
关系图DC综合后用PrimeTime做一遍STADC的时候,通过SDC定义了很多约束,留下了很多Margin为后端,DC综合的网表是理想的状态。后端会进行Place和Route并进行CTS,这才接近于真实的电路,后端会通过QRC吐出SPEF, SPEF在转成sdf,供PT分析.此时PT分析的已经不是综合之后的网表,PT分析的是经过PR之后且CTS之后的网表。目的就是看在经过后端处理之后时序是否还signoff。前端DC综合的时候,本身也会进行timing分析,有些路径时序不收敛,DC也会报出来,如果确认这是一条真的路径. 这样你就要改RTL了. DC自己都报时序不收敛,后面也都没有做的必要了。
2023年07月27日
1,310 阅读
0 评论
1 点赞
2023-04-11
Design Compile(DC)优化性、高性能性综合
compile_ultra具体使用方法参考DC manualcompile_ultra跟compile一样,是进行编译的命令。compile_ultra命令适用于时序要求比较严格,高性能的设计。使用该命令可以得到更好的延迟质量( delay QoR ),特别适用于高性能的算术电路优化。该命令非常容易使用,它自动设置所有所需的选项和变量。下面是这个命令的一些介绍:compile_ultra命令包含了以时间为中心的优化算法,在编辑过程中使用的算法有:compile_ultra命令支持DFT流程,此外compile_ultra命令非常简单易用,它的开关选项有:上面的开关部分说明如下所示:使用compile_ultra命令时,如使用下面变量的设置,所有的DesignWare层次自动地被取消: set compile_ultra_ungroup_dw true (默认值为true) 也就是说,你调用的一个加法器和一个乘法器,本来他们是以IP核的形式,或者说是以模块的形式进行综合的,但是设置了上面那么变量之后,综合后那个模块的界面就没有了,你不知道哪些门电路是加法器的,哪些是乘法器的。 使用compile_ultra命令时,使用下面的变量设置,如果设计中有一些模块的规模小于或等于变量的值,模块层次被自动取消: set compile_auto_ungroup_delay_num_cells 100(默认值=500) 也就是说,假设你有一个模块A是一个小的乘法器,并且调用了模块B,一个模块B是一个小的加法器,使用没有设置这条命令的情况综合,那么我们可以看到模块A中乘法器对应的门电路是哪些,同样也可以看到模块B的加法器是由哪些门电路构成的,模块A和模块B之间有层次、有界限;当设置上面的那条命令之后,我们就看不到模块A或者模块B之间的层次关系了,也看不到乘法器是由哪些门电路构成,或者说你看到了某一个与门,但是你并不知道它是构成乘法器的还是构成加法器的。
2023年04月11日
445 阅读
0 评论
2 点赞
2023-02-09
VCS、Verdi与Makefile使用简介
前期工作1、.fsdb文件在使用Makefile文件前,先在测试文件中加入这样一句。initial begin $fsdbDumpfile("tb.fsdb");//这个是产生名为tb.fsdb的文件 $fsdbDumpvars; end需要注意:对于用于仿真的testbench,需要额外建立一个 initial 块,调用产生有关 fsdb 格式的波形文件:首先调用 fsdbDumpfile 函数,产生一个叫 .fsdb 的波形文件然后调用 fsdbDumpvars 函数,声明需要保存那些信号的波形,括号内不加任何参数,则默认全部保存。2、 filelist.f文件filelist.f里存放所有需要仿真的.v文件。创建filelist.f的方法:find -name "*.v" >filelist.f1. Makefile作用?编写makefile文件本质上是帮组make如何一键编译,进行批处理,makefile文件包含的规则命令使我们不需要繁琐的操作,提高了开发效率。Makefile可以根据指定的依赖规则和文件是否有修改来执行命令。常用来编译软件源代码,只需要重新编译修改过的文件,使得编译速度大大加快。2. Makefile应用利用Makefile 实现简单的前端设计流程,包括VCS编译,Verdi仿真,DC综合,后续流程待补充。目录结构#use "make" for help help: @echo "make help" @echo "make com to compile" @echo "make sim to run simulation" @echo "make clean to delete temporary files" #need to midify design name design_name = div_top fsdb_name = $(design_name).fsdb # use command "make com" to run vsc and product fsdb file com: cd RTL && vcs \ -full64 \ -f flist.f \ -debug_all \ -l com.log \ +v2k \ -P $/share/PLI/VCS/LINUXAMD64/novas.tab $/share/PLI/VCS/LINUXAMD64/pli.a # cd RTL && ./simv -l sim.log +fsdbfile+$(fsdb_name) #simulation:product fsdb file and sim log sim: ./RTL/simv cd RTL && ./simv -l sim.log +fsdbfile+$(fsdb_name) # use verdi to observe the waveform verdi: cd RTL && verdi \ +v2k \ -f flist.f \ -ssf $(fsdb_name) & #use fsdb file # run dc for synthesize syn: cd dc_script && dc_shell -64bit -topographical -f top_syn.tcl | tee -i syn.log #delete all files except .v and makefile clean: #rm -rf `ls | grep -v "Makefile"|grep -v "flist.f" | grep -v "\.v" | grep -v "dc_script"` make -C RTL clean make -C dc_script clean/RTL目录下MakeFile#delete temporary files clean: rm -rf `ls | grep -v "Makefile"|grep -v "flist.f" | grep -v "\.v"` dc_script目录下Makefile#delete temporary files clean: rm -rf `ls | grep -v "Makefile"|grep -v "script" | grep -v ".*.tcl"` make com :调用vcs编译make sim:调用vcs仿真make verdi 波形,shifrt+l可刷新重新编译结果make clean 删除所有子目录下的临时生成文件 详细命令 执行“make vcs” 编译仿真执行“make verdi” 打开波形verdi常用快捷键ctrl+w: 添加信号到波形图h: 在波形窗口显示详细的信号名(路径)File>save signal,命名*.rc,下次直接打开rc文件就行c/t: 修改信号的颜色(t可以直接切换颜色)在波形窗口显示状态机的名字:在rtl窗口,tools>Extract internative FSM ,可选first stage(仅展开目前所指定的FSM state),all stage (展开所有的FSM state)改变颜色填充波形:Tools>waveform>view options>waveformpane> paint waveform with specified color/pattern在rtl窗口按x: 标注出信号的值z: 缩小波形窗口Z: 放大波形窗口f: 全屏l: 上一个视图L: 重新加载设计波形或文件n: 向前查找N: 向后查找ctrl+→: 向右移动半屏ctrl+←: 向左移动半屏双击信号波形: 跳转到rtl中信号位置,并高亮新号b: 跳到波形图开头e: 跳到波形图尾部2.不使用Makefile直接执行vcs -R -f flist.f -full64 -fsdb -l name.logverdi -f flist.f -ssf name.fsdb
2023年02月09日
682 阅读
0 评论
2 点赞
2023-01-31
RHEL7/CentOS7 VM软件中无法显示共享文件问题解决方案
问题:Linux下共享文件夹的默认路径为 /mnt/hgfs,所以 cd /mnt/hgfs 进入到共享文件夹下, ls 查看刚设置好的共享文件夹是否显示,如若不显示,进行以下操作:1:输入命令 yum -y install open-vm-tools 安装工具2:输入命令 vmhgfs-fuse .host:/ /mnt/hgfs 完成设置设置完成后,cd /mnt/hgfs 进入该目录下ls查看共享文件夹是否显示,或者重启cd /mnt/hgfs 再ls查看。 3.虚拟机重启后发现还是不能显示,执行如下命令vmhgfs-fuse .host:/ /mnt/hgfs -o nonempty -o allow_other
2023年01月31日
371 阅读
0 评论
3 点赞
2023-01-25
Synopsys ICC简单教程
一、ICC综合概述ICC(IC Compiler)是把门级网表转换成foundry厂可用于掩膜的版图信息的过程,它包括数据准备、布局、时钟树综合、布线等步骤。ICC输入文件ICC输入需要两部分信息:综合数据+物理数据。综合数据:门级网表文件,如orca.v约束文件,如orca.sdc逻辑库文件,包含时序信息,如标准单元sc.db,宏单元macros.db,输入输出单元io.db等物理数据:技术文件,包含金属层等信息,如abc_6m.tf线负载模型,TLU+物理库文件,包含版图信息,如标准单元sc.mw,宏单元macros.mw,输入输出单元io.mw等ICC输出文件ICC输出的是GDSII格式的版图,用于流片。二、ICC综合流程参考Synopsys ICC lab1的RISC_CHIP的例子,展示各个流程发生的变化。1、逻辑库、技术库、版图库等基本参数设定这是前期的准备工作,设定搜索路径、逻辑时序库.db、负载模型库.tluplus等。2、创建自己的Milkyway文件夹Milkyway是Synopsys用于保存版图所有信息的格式,创建自己的Milkyway文件夹用来保存ICC过程中的文件。读入门级网表,所有的模块都集中在角落,需要加入后续的布局布线信息。3、布局规划floorplan布局主要包含芯片大小的规划、IO单元的规划、宏单元的规划、电源网络的设计等。读入.def文件,包含了整体的布局信息,这个文件需要另外经过许多操作产生:floorplan一旦确定,整个芯片的面积就定下来了,并且和整个设计的timing、布通率密切相关。4、布局placementplacement是将一个个标准单元模块放入中间区域,通过place_opt自动排布5、时钟树综合CTS时钟树综合的主要目的是减小内部各个时钟的偏斜。时钟源必须通过一级一级的buffer才能驱动众多内部时钟,buffer采用上下延时对称的反相器。下图是时钟树综合后的布局,内部的标准单元会重新排布:下图高亮了时钟树的内部走线6、布线routing布线会经过全局布线(Global routing 和详细布线 (Detail Routing)两个步骤,通过route_opt完成:三、ICC注释详解############################################################ # 1、逻辑库、技术库等基本参数设定 ############################################################ lappend search_path ../ref/db ../ref/tlup set_app_var target_library "sc_max.db" set_app_var link_library "* sc_max.db io_max.db ram16x128_max.db" set_min_library sc_max.db -min_version sc_min.db set_min_library io_max.db -min_version io_min.db set_min_library ram16x128_max.db -min_version ram16x128_min.db # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # RISC_CHIP setup variables # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - set my_mw_lib risc_chip.mw set mw_path "../ref/mw_lib" set tech_file " ../ref/tech/cb13_6m.tf" set tlup_map "../ref/tlup/cb13_6m.map" set tlup_max "../ref/tlup/cb13_6m_max.tluplus" set tlup_min "../ref/tlup/cb13_6m_min.tluplus" set top_design "RISC_CHIP" set verilog_file "./design_data/RISC_CHIP.v" set sdc_file "./design_data/RISC_CHIP.sdc" set def_file "./design_data/RISC_CHIP.def" set ctrl_file "./scripts/opt_ctrl.tcl" set derive_pg_file "./scripts/derive_pg.tcl" set MODULE_NAME RISC_CHIP ############################################################ # 2、创建自己的Milkyway文件夹 ############################################################ file delete -force $my_mw_lib create_mw_lib $my_mw_lib -open -technology $tech_file \ -mw_reference_library "$mw_path/sc $mw_path/io $mw_path/ram16x128" #加载门级网表文件 import_designs $verilog_file \ -format verilog \ -top $top_design #加载线负载模型 set_tlu_plus_files \ -max_tluplus $tlup_max \ -min_tluplus $tlup_min \ -tech2itf_map $tlup_map #加载VDD、VSS信息 source $derive_pg_file #加载约束文件 read_sdc $sdc_file source $ctrl_file source scripts/zic_timing.tcl exec cat zic.timing remove_ideal_network [get_ports scan_en] save_mw_cel -as RISC_CHIP_data_setup ############################################################ # 3、布局规划floorplan ############################################################ # 读入布局信息并布局 read_def $def_file set_pnet_options -complete save_mw_cel -as RISC_CHIP_floorplanned ############################################################ # 4、布局placement,放置基本单元 ############################################################ place_opt redirect -tee place_opt.timing report_congestion -grc_based -by_layer -routing_stage global save_mw_cel -as RISC_CHIP_placed ############################################################ # 5、时钟树综合clock tree synthesis ############################################################ remove_clock_uncertainty [all_clocks] set_fix_hold [all_clocks] #时钟树综合 clock_opt redirect -tee clock_opt.timing # 保存文件 save_mw_cel -as RISC_CHIP_cts ############################################################ # 6、布线routing ############################################################ route_opt #报告物理信息 report_design -physical save_mw_cel -as RISC_CHIP_routed ############################################################ # 7、输出文件 ############################################################ file mkdir icc_files write -format ddc -hierarchy -output icc_files/$MODULE_NAME.apr.ddc write_verilog -no_tap_cells icc_files/$MODULE_NAME.lvs.v -pg -no_core_filler_cells write_verilog -no_tap_cells icc_files/$MODULE_NAME.sim.v -no_core_filler_cellssynopsys的实验礼包
2023年01月25日
742 阅读
0 评论
0 点赞
2023-01-14
Design Compile(DC)使用简版
Design Compile是synopsys的综合软件,它的功能是把RTL级的代码转化为门级网表。综合包括转译(Translation),优化(Opitimization),映射(Mapping)三个过程。在转译的过程中,软件自动将源代码翻译成每条语句所对应的功能模块以及模块之间的拓扑结构,这一过程是在综合器内部生成电路的布尔函数的表达,不做任何的逻辑重组和优化。优化:基于所施加的一定时序和面积的约束条件,综合器按照一定的算法对转译结果作逻辑优化和重组。在映射过程中,根据所施加的一定的时序和面积的约束条件,综合器从目标工艺库中搜索符合条件的单元来构成实际电路。DC 又称为设计综合 将设计的RTL代码综合成门级网表的过程。在 DC 流程中 一般要经过以下几个步骤,以项目A为例 做如下分析:1】 在项目子目录下创建DC文件夹,在DC文件夹下分别创建db in lib_syn log netlist rpt和 script 文件夹 以及一个makefile 文件用来运行DC 脚本 。2】 第二步就是复制相应工艺技术库文件到lib_syn ,一般有2种文件各3个分别包括了typical worst 和 best情况,一类是db,文件一类是lib 文件 也可以在lc_shell 下读取lib 得到相应的db文件。3】 第三步将需要综合的设计RTL代码(Verilog 文件)复制到in 文件夹 4】 第四步在script 创建综合脚本,脚本创建过程将在后面介绍5】 第五步编写运行脚本的makefile 文件 6】 第六步运行脚本而后查看综合报告,是否有违例现象出现,如果有修改脚本加以修复直到最终通过设计。注意 另外的几个文件夹作用 db文件夹存放DC综合生成的项目db文件,综合网表输出到netlist 文件夹,综合程序运行报告存放在log文件夹中,而综合结果的数据报告则存放在rpt 文件夹中。DC脚本的编写(A.scr)DC综合脚本基本上有几大部分组成1】定义综合环境中命名规则(分别对net cell port 命名)define_name_rules verilog –casesensitive define_name_rules verilog –type net –allowed “a-z A-Z 0-9 _ ” \ -first_restricted “ _ 0-9 N ” \ -replacement_char “_ ” \ -prefix “n” define_name_rules verilog –type cell –allowed “a-z A-Z 0-9 _ ” \ -first_restricted “ _ 0-9 ” \ -replacement_char “_” \ -prefix “u” define_name_rules verilog –type port –allowed “a-z A-Z 0-9 _ ” \ -first_restricted “ _ 0-9 ” \ -replacement_char “_” \ -prefix “p”2】综合环境的建立指明库所在的位置 Search_path = 指定综合所需目标库一般选用最恶劣情况worst 库作目标库 target_library = 创建链接库,链接库中包括了一些已经做好的设计和子模块,又包括了当前设计的目标库是设计实例化时所用的库文件 link_library = + synthetic_library 在上述的环境建立所需的各类库中,一般有生产商提供目标库,库中的各类cell用于逻辑映射,链接库则包括了目标库,还包括其他一些以前设计实例基本单元,我们门级网表实例化元件和单元都来自于它。3】RTL 代码的读入read –format verilog ./in/ Encoder_32k.v read –format verilog ./in/ Encoder_DBLOCK.v read –format verilog ./in/ Encoder.v read –format verilog ./in/ Step_rom.v指明设计顶层 current_design = Encoder 展开设计分解原设计组 ungroup -all –flatten 设计唯一实例化 uniquify 4】综合环境约束 用户往往需要设置worst case 和 best case 的库来验证setup timing 修复 hold timing 不清楚命令使用和属性 可使用 man set_min_library 查看 set_min_library lib_syn/db/slow.db -min_version lib_syn/db/fast.db 编译操作条件的表述set_operating_conditions -min slow –min_library slow \ -max fast –max_library fast 设置wire_load_model wire_load_model 负载模型的每一种模型定义,它定义相关的net_length 和 net fanout 属性 而wire_load_mode 则不同指的是不同logic margin 连线net的处理方式 一般我们只设置前者set_wire_load_model -name “ Silterra18_w110 ” –min set_wire_load_model -name “ Silterra18_w110 ” –max设置模块输入驱动强度信息 man set_driving_cell 查看帮助set_driving_cell -lib_cell BUFX1 –pin Y –library slow –dont_scale –no_design_rule all_input ( )5】设计时钟相关约束create_clock clk -period 40 set_clock_latency 0.3 –rise set_clock_latency 0.3 –fall set_clock_uncertainty –setup 0.3 set_clock_uncertainty –hold 0.3 6】禁止改变门电路控制结构芯片中的时钟和复位电路一般由门电路控制的,我们不希望DC在综合时候改变它的结构以保证时钟信号和复位信号的稳定性和可靠性需要设置,禁止对某些单元进行优化set_dont_touch_network set_dont_touch 7】异步电路处理任何跨越异步边界的路径我们都对其禁止时序分析 set_false_path -from –to 8】设置其他可选约束和禁用单元 可选约束一般包括 set_max_fanout set_max_capacitance set_max_transition set_load 等 这些属性一般在技术库中已经设置了,只有技术库不能满足设计要求时才使用脚本增加约束选项 本脚本中只增加了set_load 0.02 all_output ( ) Set_max_transition 2.5 current_design 输入输出直通buffer 插入,多重端口的连接插入buffer (选用) set_fix_multiple_port_nets –feedthrough 输出端口插入buffer , 隔离端口 (必须) set_isolate_ports –type buffer all_output ( ) 9】检查设计层次关系进行单元映射check_design –one_level compile –map_effort medium10】修复hold时序 重新编译 set_fix_hold compile –only_hold_time 11】导出编译综合相关报告核对网表命名规则修改相关信息 change_names –rules verilog –hierarchy –verbose 检查整体设计导出报告 check_design > ./rpt/adpcm.rpt 移除未连接的相关端口 remove_unconnected_ports find ( hierarchy cell , “ * ”) 导出设计面积报告 report_area > ./rpt/adpcm_area.txt 导出设计违例报告 report_constraint –all_violators > ./rpt/adpcm_cons.txt 导出setup时序违例的详细报告 report_timing –nworst 50 > ./rpt/adpcm_max_time.txt 导出hold 时序违例的详细报告 report_timing -delay min –nworst 20 > ./rpt/adpcm_min_time.txt 导出综合的设计中cell和reg_cel的报告 report_cell > ./rpt/adpcm_cell.txt report_cell > ./rpt/adpcm_reg_cell.txt12】生成综合网表和pnr 所需的时序约束文件 write -hierarchy -output ./db/adpcm.db write -format verilog –hierarchy -output ./netlist/adpcm.sv write_sdf ./netlist/adpcm.sdf write_sdc ./netlist/adpcm.sdc exit13】compile-ultra
2023年01月14日
661 阅读
0 评论
0 点赞