首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
Search
1
在IC617中进行xa+vcs数模混仿
81 阅读
2
科普:Memory Compiler生成的Register file和SRAM有何区别?
73 阅读
3
virtuoso和empyrean alps模拟仿真和混仿教程
73 阅读
4
后仿中$setup,$hold与$setuphold
44 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
35 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vscode
linux
systemverilog
vcs
STM32
PyQT
EDA
FPGA
gvim
cadence
Alist
xilinx
UVM
uos
macos
package
MCU
risc-v
bennyhe
累计撰写
378
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
搜索到
378
篇与
的结果
2026-01-04
systemverilog interface
systemverilog interface普通的模块使用法:注意我们这里只实现了部分功能。。。。不是完全的读写模块。。。。module mem_core( input logic wen, input logic ren, output logic mrdy=1, input logic [7:0] addr, input logic [7:0] mem_din, //写进mem output logic [7:0] mem_dout, //从mem读出 output logic status, input logic clk);logic[7:0] mem [7:0]; //初始化一个meminitial $readmemh("d:/init.txt",mem); //d:/init.txt 文件中是 @01 10 。//或者 assign mem [2'h01]=8'b00000111; 注意这里一定要用 initial 或者assign等语句,不能直接=task reply_read(input logic [7:0] data, integer delay); #delay; @(negedge clk) mrdy=1'b0; mem_dout=data; //从图中可看出这两句话几乎同时执行。 @(negedge clk) mrdy=1'b1;endtaskalways@(negedge ren) reply_read(mem[addr],10);endmodulemodule cpu_core( output logic wen=1, output logic ren=1, input logic mrdy, output logic [7:0] addr=0, input logic [7:0] cpu_din, output logic [7:0] cpu_dout, output logic status=0, input logic clk);task read_memory(input logic [7:0] raddr, output logic [7:0] data); @(posedge clk); ren=1'b0; addr=raddr; @(negedge mrdy); @(posedge clk); data=cpu_din; ren=1'b1; endtaskinitial beginlogic[7:0] read_data; read_memory(2'h01, read_data); $display("Read Result", $time,read_data);endendmodulemodule top; logic mrdy,wen,ren; logic[7:0] addr,d1,d2; wor status; logic clk=0;mem_core mem(., .mem_din(d1), .mem_dout(d2)); //采用对同名的信号做默认连接 cpu_core cpu(.*, .cpu_din(d2), .cpu_dout(d1));initial for(int i=0;i<=255;i++) #1 clk=!clk;endmoduleSystemverilog interface另外,SystemVerilog引入一个重要的数据类型:interface。其主要作用有两个:一是简化模块之间的连接;二是实现类和模块之间的通信;随着复杂度的提高,模块间互联变得复杂,SV引入接口,代表一捆连线的结构,具有智能同步和连接功能的代码;接口(interface)为硬件模块的端口提供了一个标准化的封装方式。用interface来封装接口的信号和功能。interface的定义是独立于模块的,通过关键字interface和endinterface包起来。此外,interface里面还可以带时钟、断言、方法等定义。 一个interface 也可以有input,output或是inout端口。当interface例化时,只有当变量或是线网声明在一个interface的端口列表中才能通过名字或是位置来互连.一种新加的和interface有关系的构造体是Modport 。它提供了module的interface端口和在特定的module中控制task和function使用的方向性信息。这些端口的方向可以在module中可以看到。接口使用无信号的连接方式。Modport将接口中信号分组并指定方向。就像下图中的黑色矩形块里面一样,黑盒,我们从外面看并不关心Modport的定义,只需要考虑clk。Systemverilog interfaceinterface membus(input logic clk, output wor status); logic mrdy; logic wen; logic ren; logic [7:0] addr; logic [7:0] c2m_data; logic [7:0] m2c_data;task reply_read(input logic [7:0] data, integer delay); #delay; @(negedge clk) mrdy=1'b0; m2c_data=data; @(negedge clk) mrdy=1'b1;endtask//Task和function可以定义在interface中,从而允许构造更抽象级的模型task read_memory(input logic [7:0] raddr, output logic [7:0] data); @(posedge clk); ren=1'b0; addr=raddr; @(negedge mrdy); @(posedge clk); data=m2c_data; ren=1'b1; endtaskmodport master(output wen, ren, addr, c2m_data, input mrdy, m2c_data, status, read_memory);modport slave(input wen, ren, addr, c2m_data, output mrdy, m2c_data, status, reply_read);//控制task和function使用的方向性信息,以便在下面的module中使用endinterfacemodule mem_core(membus.slave mb); //modport只需在模块首部指明(或者在()中),在模块例化时不需要指明使用接口时在模块和程序块之外声明接口变量;//接口信号必须采用非阻塞值赋值来驱动。 logic[7:0] mem [7:0]; assign mem [2'h01]=8'b00000111; assign mb.status=0; always@(negedge mb.ren) mb.reply_read(mem[mb.addr],100); //module可使用interface端口endmodulemodule cpu_core(membus.master mb); assign mb.status=0; initial beginlogic[7:0] read_data; mb.read_memory(2'h01, read_data); $display("Read Result", $time,read_data);endendmodulemodule top; wor status; logic clk=0; membus mb(clk,status); mem_core mem(.mb(mb.slave)); cpu_core cpu(.mb(mb.master));initial for(int i=0;i<=255;i++) #1 clk=!clk;endmoduleSystem verilog把测试平台的代码放在一个程序块中,包含代码和变量,我总结了几步使用interface的方法1、 首先定义一个interface interface arb_if(input bit clk); logic [1:0] grant, request; logic reset; clocking cb @(posedge clk); //在其中定义一个时钟块。供下面的测试program使用。测试program中所有使用到的信号都应该定义在其中 output request; //注意这里的方向是测试program中所需要的方向,一般跟DUT 中的相反 input grant; endclockingmodport TEST (clocking cb, // 使用modport,将信号分组 output reset); modport DUT (input request, reset, clk, output grant); modport MONITOR (input request, grant, reset, clk);endinterface2、定义一个基于interface参数的设计模块modulemodule arb (arb_if.DUT arbif); //该interface参数要实例化 reg last_winner; reg winner; reg [1:0] next_grant; reg [1:0] state, nxState; always @(posedge arbif.clk or posedge arbif.reset) begin 。。。 endendmodule 3、定义一个基于interface参数的测试程序program program automatic test (arb_if.TEST arbif); //该interface参数也要实例化task reset_test();begin$display("Task reset_test: asserting and checking reset"); arbif.reset <= 0; #100 arbif.reset <= 1; //测试program中所有使用到的信号都应该调用在interface中的时钟块里定义的信号 arbif.cb.request <= 0; repeat (2) @arbif.cb; arbif.reset <= 0; @arbif.cb; //测试program中是这样等待时钟边沿的。 a0: assert (arbif.cb.grant == 2'b00); 。。。 end endtask task request_grant_test();begin 。。。 end endtask //注意program中不允许使用always块。 initial begin repeat (10) @arbif.cb; reset_test(); request_grant_test(); repeat (10) @arbif.cb; $finish; endendprogram4、‘最后使用一个顶层模块将它们组合起来module top; bit clk; always #5 clk = !clk; arb_if arbif(clk); //实例化一个interface arb a1 (arbif); //实例化一个module,参数调用上面实例化的interface test t1(arbif); //实例化一个测试program,参数调用上面实例化的interfaceendmodule当然也可以隐式端口连接,值使用.*即可。module top; bit clk; always #5 clk = !clk; arb_if arbif(.*); arb a1 (.*); test t1(.*); endmodule虚接口:虚接口是物理接口的句柄interface 和 module是一样的, 都是静态的变量, 也就是在程序开始时, 内存中就有了其实例.但是在class里使用virtual interface时之前有两部必须提前完成:l 定义是将接口作为一个类进行定义。l 实例化:在RTL级的顶层中对接口进行实例化。先定义一个接口。interface Rx_if (input logic clk);logic [7:0] data; logic soc, en, clav, rclk; clocking cb @(posedge clk); output data, soc, clav; input en; endclocking : cb modport DUT (output en, rclk, input data, soc, clav); modport TB (clocking cb);endinterface : Rx_if例如网络交换机中DUT 的每一个通道都有一个接口。,一个Driver类可能会连接到很多接口。我们可以在Driver类中使用一个虚接口作为参数。 class Driver;virtual Rx_if.TB Rx; //想一想,如果不是虚接口,而是一个普通接口,就像一个普通模块一样,是一个静态变量。比如我们在顶层模块例化了这个接口 Rx, 那么下面所有的 实例化的 drv[i]都是对这同一个接口 Rx进行操作,这显然不是我们想要的。如果定义了virtual,则每个实例独立。......endclass然后在测试program中 创建一组虚接口program automatic test(Rx_if.TB Rx[4], Tx_if.TB Tx[4], output logic rst); ........Driver drv[4]; //实例化了4个 Driver 对象,每个 Driver对象带有1个实例化的虚接口 .........initial beginvirtual Rx_if.TB vRx_t=Rx; //创建一组虚接口,由于这里定义了virtual,所以实例化的时候可以有Rx[]. for (int i=0; i<4; i++) begin drv[i] = new(...., vRx[i]); end rst <= 1; repeat (10) @Rx[0].cb; rst <= 0; for (int i=0; i<4; i++) begin drv[i].run(5, driver_done); //发送....... end..........endprogram : test最后在顶层:module top; logic clk, rst;Rx_if Rx[4] (clk); ,,,, atm_router a1 (Rx[0], Rx[1], Rx[2], Rx[3], Tx[0], Tx[1], Tx[2], Tx[3], clk, rst);test t1 (Rx, Tx, rst);initial beginclk = 0; forever #20 clk = !clk; end endmodule : top定义一个interface,且实例化多个后,如果没有定义virtual,则在任何一个实例中修改了某个信号值,在其他实例中都会受到影响。如果定义了virtual,则每个实例独立。如果该interface只有一个实例,可用可不用virtual,有多个实例,需要virtual。再举个例子:8位计数器`timescale 1ns/1nsinterface X_if (input logic clk);logic [7:0] din, dout; logic reset_l, load; clocking cb @(posedge clk); output din, load; input dout; endclocking always @cb //接口里面也可以带子程序,断言,initial,always块等代码。 $strobe("@ : %m: dout= , din= , load= , reset= ", $time, dout, din, load, reset_l); modport DUT (input clk, din, reset_l, load, output dout); modport TB (clocking cb, output reset_l);endinterface// Simple 8-bit counter with load and active-low reset`timescale 1ns/1nsmodule DUT(X_if.DUT xi); logic [7:0] count; assign xi.dout = count; //们想要输出的结果就是计数器always @(posedge xi.clk or negedge xi.reset_l)begin if (!xi.reset_l) count = 0; else if (xi.load) count = xi.din; else count++; end endmodule////////////////////////////////`timescale 1ns/1nsprogram automatic test();parameter NUM_XI = 2; // Number of interface instancestypedef virtual X_if.TB vXi_t; vXi_t vxi[NUM_XI]; //虚接口数组 class Driver; //在测试程序中定义类 vXi_t xi; int id; function new(vXi_t xi, int id); this.xi = xi; this.id = id; endfunction task reset; fork begin $display("@ : %m: Start reset [ ]", $time, id); // Reset the device xi.reset_l <= 1; xi.cb.load <= 0; xi.cb.din <= 0; @(xi.cb) xi.reset_l <= 0; @(xi.cb) xi.reset_l <= 1; $display("@ : %m: End reset [ ]", $time, id); end join_none endtask task load; fork begin $display("@ : %m: Start load [ ]", $time, id); xi.cb.load <= 1; xi.cb.din <= id + 10; xi.cb.load <= 0; repeat (5) @(xi.cb); $display("@ : %m: End load [ ]", $time, id); end join_none endtask endclass Driver driver[]; initial begin // Connect the local virtual interfaces to the top $display("Test.v: There are NUM_XI = interfaces", NUM_XI); if (NUM_XI <= 0) $finish; driver = new[NUM_XI]; //创建driver, 每个DUT 要对应一个driver vxi = top.xi; //XMR跨模块连接。这种是推荐做法,就不用带参数了program automatic test(X_if xi[NUM_XI]); 了。//注意这里其实是把top模块中生成的xi[]数组的句柄传过来的for (int i=0; i《NUM_XI; i++) begin driver[i] = new(vxi[i], i); driver[i].reset; end foreach (driver[i]) driver[i].load; repeat (10) @(vxi[0].cb); $display("@ : Test completed", $time); $finish; end endprogram////////////////////////////////////////////////////////`timescale 1ns/1nsparameter NUM_XI = 2; // Number of interface instancesmodule top; // Clock generator bit clk; initial forever #20 clk = !clk;X_if xi [NUM_XI] (clk); // Instantiate N Xi interfaces// Generate N DUT instances generate for (genvar i=0; i《NUM_XI; i++)begin : dut DUT d (xi[i]); endendgenerate// Instantiate the testbench, overriding the parameter with number of instances test tb();endmodule : top
2026年01月04日
2 阅读
0 评论
0 点赞
2025-12-31
tri0 GSR = glbl.GSR; Error-[XMRE] Cross-module reference resolution error
编译 vviado 的lib 出现 Error-[XMRE] Cross-module reference resolution error././././././././././unisims_ver_source.v, 9907 Error found while trying to resolve cross-module reference. token 'glbl'. Originating module 'DCM_ADV'. Source info: assign GSR = glbl.GSR;方法一:首先将 $VIVADO_PATH/data/verilog/src/glbl.v 放入文件列表,然后设置top, vcs -top top -top glbl 或者 xrun -top top -top glbl第一个-top 是设计本身的top ,第二个-top 是添加 glbl方法二:没有试过,仅供参考在vlogan里面添加glbl.v,将glbl.v编译到xil_defaultlib库中compile: vlogan \ +v2k \ -full64 \ -work xil_defaultlib \ "/opt/vivado/glbl.v" \ 然后我们需要再vcs命令添加glblelaborate: vcs \ -full64 \ -cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed \ -Mdir=./vcs_lib/xil_defaultlib \ -sverilog \ -debug_acc+all -debug_region+cell+encrypt \ $(verdi_opts) \ xil_defaultlib.${tc} xil_defaultlib.glbl\ -o simv \ 2>&1 | tee -a vlogan.log
2025年12月31日
4 阅读
0 评论
0 点赞
2025-12-31
GVIM——简直美如画,有没有!
"========================================== " Author: wklken " Version: 9.1 " Email: wklken@yeah.net " BlogPost: http://www.wklken.me " ReadMe: README.md " Donation: http://www.wklken.me/pages/donation.html " Last_modify: 2015-12-15 " Sections: " -> Initial Plugin 加载插件 " -> General Settings 基础设置 " -> Display Settings 展示/排版等界面格式设置 " -> FileEncode Settings 文件编码设置 " -> Others 其它配置 " -> HotKey Settings 自定义快捷键 " -> FileType Settings 针对文件类型的设置 " -> Theme Settings 主题设置 " " -> 插件配置和具体设置在vimrc.bundles中 "========================================== colorscheme molokai "========================================== " Initial Plugin 加载插件 "========================================== " 开启语法高亮 syntax on " install bundles if filereadable(expand("~/.vimrc.bundles")) source ~/.vimrc.bundles endif " ensure ftdetect et al work by including this after the bundle stuff filetype plugin indent on " NOTE: 以下配置有详细说明,一些特性不喜欢可以直接注解掉 "========================================== " General Settings 基础设置 "========================================== " history存储容量 set history=2000 " 检测文件类型 filetype on " 针对不同的文件类型采用不同的缩进格式 filetype indent on " 允许插件 filetype plugin on " 启动自动补全 filetype plugin indent on " 突出显示当前列 "set cursorcolumn " 突出显示当前行 set cursorline " 设置 退出vim后,内容显示在终端屏幕, 可以用于查看和复制, 不需要可以去掉 " 好处:误删什么的,如果以前屏幕打开,可以找回 "set t_ti= t_te= "========================================== " Display Settings 展示/排版等界面格式设置 "========================================== " 显示当前的行号列号 set ruler " 在状态栏显示正在输入的命令 set showcmd " 左下角显示当前vim模式 set showmode " 显示行号 set number " 取消换行 set nowrap " 括号配对情况, 跳转并高亮一下匹配的括号 set showmatch " How many tenths of a second to blink when matching brackets set matchtime=2 " 设置文内智能搜索提示 " 高亮search命中的文本 set hlsearch " 打开增量搜索模式,随着键入即时搜索 set incsearch " 搜索时忽略大小写 set ignorecase " 有一个或以上大写字母时仍大小写敏感 set smartcase " 代码折叠 set foldenable " 折叠方法 " manual 手工折叠 " indent 使用缩进表示折叠 " expr 使用表达式定义折叠 " syntax 使用语法定义折叠 " diff 对没有更改的文本进行折叠 " marker 使用标记进行折叠, 默认标记是 {{{ 和 }}} set foldmethod=indent set foldlevel=99 " 缩进配置 " Smart indent set smartindent " 打开自动缩进 " never add copyindent, case error " copy the previous indentation on autoindenting set autoindent " tab相关变更 " 设置Tab键的宽度 [等同的空格个数] set tabstop=4 " 每一次缩进对应的空格数 set shiftwidth=4 " 按退格键时可以一次删掉 4 个空格 set softtabstop=4 " insert tabs on the start of a line according to shiftwidth, not tabstop 按退格键时可以一次删掉 4 个空格 set smarttab " 将Tab自动转化成空格[需要输入真正的Tab键时,使用 Ctrl+V + Tab] set expandtab " 缩进时,取整 use multiple of shiftwidth when indenting with '<' and '>' set shiftround " A buffer becomes hidden when it is abandoned set hidden set wildmode=list:longest set ttyfast "========================================== " others 其它设置 "========================================== " vimrc文件修改之后自动加载, windows autocmd! bufwritepost _vimrc source % " vimrc文件修改之后自动加载, linux autocmd! bufwritepost .vimrc source % " 自动补全配置 " 让Vim的补全菜单行为与一般IDE一致(参考VimTip1228) set completeopt=longest,menu " 打开自动定位到最后编辑的位置, 需要确认 .viminfo 当前用户可写 if has("autocmd") au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif endif autocmd StdinReadPre * let s:std_in=1 "========================================== " omnicppcomplete插件 "========================================== set nocp set tags+=/home/yk/.vim/tags/cpp let OmniCpp_GlobalScopeSearch = 1 let OmniCpp_NamespaceSearch = 1 let OmniCpp_DisplayMode = 0 let OmniCpp_ShowPrototypeInAbbr = 1 let OmniCpp_ShowAccess = 1 let OmniCpp_DefaultNamespaces = ["std"] let OmniCpp_MayCompleteDot = 1 let OmniCpp_MayCompleteArrow = 1 let OmniCpp_MayCompleteScope = 1 let OmniCpp_SelectFirstItem = 1 au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif set completeopt=menuone,menu,longest,preview hi Pmenu guibg=#708090 guifg=#000000 hi PmenuSel guibg=#2F4F4F "========================================== " NERD_Tree插件 "========================================== autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif let NERDTreeSortOrder=['//$','/.cpp$','/.c$', '/.h$', '/.py$', '/.lua$', '*'] let NERDTreeCaseSensitiveSort=0 let NERDTreeWinSize=34 let NERDTreeShowLineNumbers=1 let NERDTreeShowBookmarks=1 let NERDTreeDirArrows=1 let NERDTreeChDirMode=2 let NERDChristmasTree=1 let NERDTreeMouseMode=2 let NERDTreeHighlightCursorline=1 "========================================== " taglist_46插件 "========================================== autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | TlistToggle autocmd bufenter * if (winnr("$") == 1 && exists("b:TlistToggle") && b:TlistToggle == "primary") | q | endif let Tlist_Auto_Open=1 let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 let Tlist_Use_Right_Window = 1 let Tlist_WinWidth=36 "========================================== " MiniBufExplorer插件 "========================================== let g:miniBufExplMapWindowNavVim = 1 let g:miniBufExplMapWindowNavArrows = 1 let g:miniBufExplMapCTabSwitchBufs = 1 let g:miniBufExplModSelTarget = 1 let g:miniBufExplMoreThanOne=0 "========================================== " SuperTab插件 "========================================== let g:SuperTabDefaultCompletionType="context" "========================================== " Winmanager插件 "========================================== "autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | WMToggle "autocmd bufenter * if (winnr("$") == 1 && exists("b:WMToggle") && b:WMToggle == "primary") | q | endif let g:AutoOpenWinManager = 1 let g:NERDTree_title="[Explorer]" let g:winManagerWindowLayout = "NERDTree" let g:winManagerWidth=34 let g:defaultExplorer=1 function! NERDTree_Start() exec 'NERDTree' endfunction function! NERDTree_IsValid() return 1 endfunction
2025年12月31日
4 阅读
0 评论
0 点赞
2025-12-31
vivado与vscode完美结合
vivado虽然非常优秀,但是也有一个缺点就是vivado的编辑器很难用1、没有高亮(不完整的)2、不能自动补全3、背景白色很伤眼4、没有自动跳转到定义功能5、没有括号定位功能这篇文章,我将把这几个全部解决,同时也不是完全使用vscode编写verilog工程,因为ip核的部分必须用vivado才方便,所以我推荐编写代码用vscode,其余功能还在vivado实现,这样就需要把vivado的代码文件用vscode打开,同时跟我在vscode中进行一些设置,让vscode成为vivado的专属编辑软件,提升编写代码效率。废话不多说直接上干货!!!!1、下载安装vscode(安装过的可以忽略)下载地址:vscode官方下载地址感觉官方下载速度慢的,也给大家准备好了安装包 :vscode安装包安装教程:傻瓜式安装,一路点下一步即可安装成功。2、插件安装(1)中文语言包 Language Pack for Visual Studio Code(2)代码高亮 Code formatter(3)verilog 支持包 Verilog-HDL/SystemVerilog/Bluespec SystemVerilog其余还有很多插件,我认为安装这三个足够了,其余用到的时候再安装,这三个已经完全够用!3、实现自动纠错在其他编辑器,编写verilog最大的问题就是不能自动纠错,下面介绍一个最简单的方法(1)提前你的PC需要安装vivado,并把下面的路径复制(我的为例)D:\Xilinx\Vivado\2018.3\bin(2)并把这个地址添加到系统环境变量的Path中:(3)在PC的cmd窗口输入:xvlog --version 查看是否生效,如果没有打印出未找到该命令,那么你可能需要重启您的电脑。(4)接下来我们在vscode设置里,搜索Linter,将verilog的Linter更换成xvlog。设置完成之后,就能实现语法的纠错,在平常的工程编写中非常舒服。4、自动跳转到定义变量的位置在编写verilog有一个跟头疼的问题,就是不能像C那样直接跳转到定义变量的位置,有时候定义的变量多了,就不知道位宽和这个变量的意义了,还有从头去找,很是麻烦,下面介绍一种非常简单的就能跳转到定义位置的方法。(1)下载插件ctags.exe文件下载地址:ctags.exe下载并把他复制到vivado安装目录下:(2)复制ctags.exe文件位置D:\Xilinx\ctags-p6.1.20240114.0-x64(3)把ctags.exe地址添加到系统环境变量Path中(4)打开vscode搜索ctags,并把地址添进去D:\Xilinx\ctags-p6.1.20240114.0-x64||ctags.exe(5)重新打开vscode即可实现变量快速跳转5、括号自动匹配(1)打开设置搜索,然后把这两个都勾选上即可@id:editor.bracketPairColorization.enabled @id:editor.guides.bracketPairs(2)重新打开vscode即可实现括号自动匹配(也包括begin end)6、代码里面中文乱码换一个编辑器打开代码,里面的中文注释全部变成不认识的符号,这种问题大家是不是经常遇到,今天教大家一次性解决这个的问题vivado中代码形式默认为GB2312模式,所以我们只需要把vscode中默认代码形式改为GB2312即可打开vscode设置界面,搜索 encoding,把这个改为GB2312即可这样代码里的注释,都能显示出来了这样一个只属于vivado的vscode已经设置完成了,就可以很轻松愉快的在vscode和vivado中间穿梭,非常的丝滑,后续如果有更好的插件或者设置,还是会在这个文章上面继续更新!!如果感觉文章对您有用,麻烦三连支持一下,方便下次用到的时候,就可以快速找到我,非常感谢您的支持!!!————————————————版权声明:本文为CSDN博主「FPGAmaster创新者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/w18864443115/article/details/135604467
2025年12月31日
2 阅读
0 评论
0 点赞
2025-12-31
模拟电路怎样才算入门了?请掌握这14点!
很多初学者问,怎么学习模拟电路,我得回答是:看模拟电路的书籍。朋友说,这样说太笼统了,让我仔细说一说。其实我也不知道从何说起。就把我认为该掌握的一些要点列举一下,仅共参考,如有不妥之处,敬请批评指正。1、掌握二极管,三极管,场效应的特性以及主要参数。这些是最常用到的器件。2、掌握半桥和全桥整流的形式,最长用的RC滤波,和LC滤波以及“拍”型滤波电路的应用场合,理解这些元器件的参数选取。3、掌握单管共射(共源)、共集(共漏)、共基(共栅)放大电路的组成,工作原理、特点及直流和交流等效电路分析法.牢记测试三极管和场效应管的法则,并能识别管子的管脚。4、知道差模信号和共模信号的概念,双端输入和单端输入的区别,零点漂移的原因以及克服他的方法。5、通用集成运算放大器的组成、工作原理及其主要特性,学会用分析理想运放的方法。6、正确理解什么是反馈,掌握判别电路是否存在反馈?是正反馈还是负反馈?是交流反馈还是直流反馈,是电压反馈还是电流反馈?是串联反馈还是并联反馈?7、掌握由理想运放放大器组成的反相、同相比例电路,加法运算电路,减法运算电路、积分电路和微分电路,乘法电路,指数电路和对数电路的原理,学会设计滞后比较器。8、了解频率响应和失真的概念。理解单管放大电路或者运放放大电路的 f L 、 f H 计算。9、掌握单门限电压比较器的电路组成、工作原理及传输特性。10、掌握正弦波振荡电路的振荡条件和 RC 桥式正弦波振荡电路的电路组成,振荡频率的计算,了解稳幅原理,知道最常用的典型的波形发生器电路。11、理解三点式 LC ,RC正弦波振荡电路结构及其工作原理,以及石英晶体振荡器的工作原理,知道有源晶振和无源晶振的有缺点。12、了解功率放大器的三种工作状态,甲类、乙类和甲乙类的工作特点以及功率、效率、非线性失真的物理概念和相互关系。最长用的OTL功放电路的特点以及应用场合。13、掌握三相电路的特点,无功功率,有功功率,功率因数。怎样提高功率因数。14、知道什么是调谐和解调。还有很多的方面都没有设计到,只是泛泛的列举了几条,肯定需要的知识还是很多的。
2025年12月31日
2 阅读
0 评论
0 点赞
1
...
4
5
6
...
76