首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
Search
1
在IC617中进行xa+vcs数模混仿
81 阅读
2
virtuoso和empyrean alps模拟仿真和混仿教程
74 阅读
3
科普:Memory Compiler生成的Register file和SRAM有何区别?
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
篇与
的结果
2025-06-11
pyqt 知识汇总
pyqt 窗口字体和大小自适应Step1:布局选择“栅格布局”Step2:选择各个窗口组件,sizepolicyStep3:选择”栅格布局”, 组件的大小是自己调整的吗,无法手动设置,但是对于不需要放大的长或者宽,可以设置一个最大值比如最后设置字体的大小,Qlabel 的字体大小设置双击弹出窗口设置QtextBrowser或者Qbutton:在属性中设置
2025年06月11日
0 阅读
0 评论
0 点赞
2025-06-09
Python 如何将PyQt脚本(.py)编译成独立的可执行文件在Windows(.exe)和Linux上
Python 如何将PyQt脚本(.py)编译成独立的可执行文件在Windows(.exe)和Linux上在Windows系统上编译PyQt脚本为可执行文件在Windows系统上,我们可以使用PyInstaller这个工具来编译PyQt脚本为可执行文件。PyInstaller是一个自包含(stand-alone)的Python应用程序构建打包工具,它能够将Python脚本及其所依赖的库打包成一个独立的可执行文件。首先,我们需要安装PyInstaller。可以使用以下命令在命令行中安装:pip install pyinstaller国内的源:所以,我决定整合一哈国内镜像源的PyInstaller模块代码,方便以后自己复制使用pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller安装完成后,我们可以使用以下命令将PyQt脚本编译成可执行文件:pyinstaller --onefile YourScript.py其中,”YourScript.py”是你要编译的PyQt脚本的文件名。编译完成后,会在当前目录下生成一个可执行文件。在Linux系统上编译PyQt脚本为可执行文件在Linux系统上,我们可以使用PyInstaller或者cx_Freeze这两个工具来编译PyQt脚本为可执行文件。这两个工具的用法类似,在这里我们以PyInstaller为例进行介绍。首先,我们同样需要先安装PyInstaller。可以使用以下命令在命令行中安装:pip install pyinstaller安装完成后,我们可以使用以下命令将PyQt脚本编译成可执行文件:pyinstaller --onefile YourScript.py其中,”YourScript.py”是你要编译的PyQt脚本的文件名。编译完成后,同样会在当前目录下生成一个可执行文件。其他注意事项在编译PyQt脚本为可执行文件时,需要注意以下几点:确保你的脚本中所有依赖的库都已经安装。如果你的脚本中有使用到其他的资源文件,如图片、字体等,需要将这些资源文件一同放置在同一个目录下,以便可执行文件正确加载。在编译可执行文件时,PyInstaller或cx_Freeze会将所依赖的库一同打包进可执行文件中,因此可执行文件可能会比较大。如果想减小可执行文件的大小,可以尝试使用--noconsole参数去掉控制台的输出(仅限Windows系统),或者使用--onefile参数生成单个可执行文件。总结通过本文我们了解了如何将PyQt脚本编译成独立的可执行文件,在Windows和Linux系统上都有相应的工具可以使用。在实际开发过程中,我们可以根据自己的实际需求选择合适的工具来进行编译和打包。使用PyInstaller或cx_Freeze等工具,我们可以方便地将PyQt程序转化为可执行文件,并且在其他平台上进行部署和分发。这将极大地方便用户的使用,同时保护了源码的安全性。希望本文可以对你在编译PyQt脚本方面有所帮助。
2025年06月09日
1 阅读
0 评论
0 点赞
2025-06-08
统信UOS安装node, npm,vue
(1)查看自己的系统uname -a2)进入nodejs官网下载相应版本(3)找个位置解压,然后复制文件目录保存好地址,等下要用到(4)编辑环境变量sudo vim /etc/profileAI写代码shell按下“i”键 进入编辑模式,在文末添加export NODE_HOME=步骤三刚刚复制的地址(去掉file://)export PATH=$PATH:$NODE_HOME/bin按ESC,然后输入:wq 即可,完成文件保存并退出,(5)环境变量生效,在终端输入以下指令即可source /etc/profile /etc/bash.bashrcAI写代码shell\(6)验证node和npmnode -v npm -v(7)创建node和npm链接sudo ln -s 【原地址】 【链接地址】(8)npm 安装vuenpm install --global vue-cliAI写代码shell(9)创建vue链接,同第7步(10)最终验证node -vnpm -vvue --versionAI写代码shell以上正确输出即完成安装(11)创建Vue项目vue create 【vue-project】(自定义name)
2025年06月08日
1 阅读
0 评论
0 点赞
2025-06-06
SystemVerilog和SystemC协同验证环境介绍(2)
1、下载 uvmc (uvm connect)https://download.csdn.net/download/yp18792574062/88529417?spm=1001.2014.3001.55012、配置相关环境变量export UVM_HOME=${VCS_HOME}/etc/uvm export UVMC_HOME=/home/yangpan/yangpan/uvmc/uvmc-2.3.1然后执行 source ~/.zshrc 更新3、编译 uvmc 自带的例子编译之前需要更新 gcc 的版本,这里将 gcc 版本降低到 5.2.0,因为 vcs2018 只支持少数几个 gcc 版本,降低 gcc 的版本可以参考之前的文章cd examples/converters ln -sf Makefile.vcs Makefile make comp EXAMPLE=sv2sc ./simv make comp EXAMPLE=sc2sv ./simv4、自己动手写一个 sc 到 sv 再到 sc 的例子因为对 system verilog 不熟悉,所以这里 sv 在接收到数据后就立马发送给 sc,实现一个数据的回传效果MakefileSYSCAN = syscan -cpp g++ -cc gcc -tlm2 \ -cflags -g \ -cflags -DVCS \ -cflags -std=c++11 \ -cflags -I${VCS_HOME}/etc/systemc/tlm/include/tlm/tlm_utils \ -cflags -I${UVMC_HOME}/src/connect/sc \ -cflags -I${UVMC_HOME}/src \ -cflags -Icpp \ ${UVMC_HOME}/src/connect/sc/uvmc.cpp VLOGAN = vlogan -q -sverilog \ +incdir+${UVM_HOME}/src ${UVM_HOME}/src/uvm_pkg.sv \ +incdir+${UVMC_HOME}/src/connect/sv ${UVMC_HOME}/src/connect/sv/uvmc_pkg.sv \ -timescale=1ns/1ps VCS_ELAB = vcs -q -sysc=deltasync -lca \ -sysc -cpp g++ -cc gcc \ -timescale=1ns/1ps \ -CFLAGS -DVCS ${UVM_HOME}/src/dpi/uvm_dpi.cc CURRENT_DIR = $(shell pwd) CPP_DIR = $(shell find $(CURRENT_DIR)/cpp -maxdepth 20 -type d) SRCS_CPP += $(foreach dir, $(CPP_DIR), $(wildcard $(dir)/*.cpp)) SRCS_CC += $(foreach dir, $(CPP_DIR), $(wildcard $(dir)/*.cc)) SRCS_C += $(foreach dir, $(CPP_DIR), $(wildcard $(dir)/*.c)) SV_DIR = $(shell find $(CURRENT_DIR)/sv -maxdepth 20 -type d) SRCS_SV += $(foreach dir, $(SV_DIR), $(wildcard $(dir)/*.sv)) comp: $(SYSCAN) -full64 $(SRCS_CPP) $(SRCS_CC) $(SRCS_C) $(VLOGAN) -full64 $(SRCS_SV) +define+UVM_OBJECT_MUST_HAVE_CONSTRUCTOR $(VCS_ELAB) -full64 sv_main sc_main # 这里要写 verilog、sv、sc 对外的模块名字 clean: rm -rf simv* work csrc ucli.key vc_hdrs.h vcs.log AN* *.log *.log.cmp *.vpd DVE* .vlogan* run: ./simvSystemc 发送模块// sender.h #pragma once #include "systemc.h" #include <string> #include <iomanip> #include "uvmc.h" using namespace uvmc; #include <tlm.h> using namespace sc_core; using namespace tlm; #include "simple_initiator_socket.h" using tlm_utils::simple_initiator_socket; class producer : public sc_module { public: SC_HAS_PROCESS(producer); producer(sc_module_name ins_name); virtual ~producer(); void run(); public: simple_initiator_socket<producer> out; tlm_analysis_port<tlm_generic_payload> ap; sc_event done; }; class Sender : public producer { public: SC_HAS_PROCESS(Sender); Sender(sc_module_name instname); ~Sender(); void SendData(); };// sender.cpp #include "sender.h" #include <string> producer::producer(sc_module_name ins_name) : sc_module(ins_name), out("out"), ap("ap") { SC_THREAD(run); } producer::~producer() = default; void producer::run() { for (int i = 0; i < 10; ++i) { std::string data = "xxxxx: " + std::to_string(i); tlm_generic_payload gp; gp.set_data_ptr((uint8_t*)data.c_str()); gp.set_command(TLM_WRITE_COMMAND); gp.set_address(rand()); sc_time delay = sc_time(10, SC_NS); gp.set_data_length(data.length()); out->b_transport(gp, delay); ap.write(gp); wait(20, SC_NS); } done.notify(); } Sender::Sender(sc_module_name instname) : producer(instname) { SC_THREAD(SendData); } Sender::~Sender() = default; void Sender::SendData() { uvmc_raise_objection("run"); wait(done); uvmc_drop_objection("run"); }SystemC 接收模块// receiver.h #pragma once #include <string> #include <iomanip> #include <systemc.h> #include <tlm.h> using namespace tlm; #include "simple_target_socket.h" using tlm_utils::simple_target_socket; class Receiver : public sc_module { public: SC_HAS_PROCESS(Receiver); Receiver(sc_module_name ins_name); ~Receiver(); virtual void b_transport(tlm_generic_payload &gp, sc_time &t); public: simple_target_socket<Receiver> in; tlm_analysis_port<tlm_generic_payload> ap; }; // receiver.cpp #include "receiver.h" Receiver::Receiver(sc_module_name ins_name) : sc_module(ins_name), in("in"), ap("ap") { in.register_b_transport(this, &Receiver::b_transport); } Receiver::~Receiver() = default; void Receiver::b_transport(tlm_generic_payload &gp, sc_time &t) { unsigned char* data = gp.get_data_ptr(); int len = gp.get_data_length(); std::cout << "receive data: " << (char*)data << std::endl; ap.write(gp); }sc_main// main.cpp #include <systemc.h> #include "receiver.h" #include "sender.h" int sc_main(int argc, char* argv[]) { Sender sender("sender"); uvmc_connect(sender.out, "42"); Receiver receiver("receiver"); uvmc_connect(receiver.in, "foo"); sc_start(1000, SC_NS); return 0; }System Verilog 数据回传模块// sv_loop.sv import uvm_pkg::*; import uvmc_pkg::*; `include "uvm_macros.svh" class producer extends uvm_component; uvm_tlm_b_initiator_socket #() out; uvm_analysis_port #(uvm_tlm_gp) ap; uvm_phase run_ph; `uvm_component_utils(producer) function new(string name, uvm_component parent=null); super.new(name,parent); out = new("out", this); ap = new("ap", this); run_ph = uvm_run_phase::get(); endfunction task send(uvm_tlm_gp t, uvm_tlm_time delay); run_ph.raise_objection(this); out.b_transport(t, delay); ap.write(t); run_ph.drop_objection(this); /* uvm_tlm_gp gp = new; uvm_tlm_time delay = new("del",1e-12); run_ph.raise_objection(this); delay.set_abstime(10,1e-9); assert(gp.randomize() with { gp.m_byte_enable_length == 0; gp.m_length inside {[1:8]}; gp.m_data.size() == m_length; } ); `uvm_info("PRODUCER/PKT/SEND",{"\n",gp.sprint()},UVM_MEDIUM) out.b_transport(gp,delay); ap.write(gp); #100; `uvm_info("PRODUCER/END_TEST", "Dropping objection to ending the test",UVM_LOW) run_ph.drop_objection(this); */ endtask endclass class consumer extends uvm_component; uvm_tlm_b_target_socket #(consumer) in; uvm_analysis_port #(uvm_tlm_generic_payload) ap; producer prod; `uvm_component_utils(consumer) function new(string name, uvm_component parent=null); super.new(name,parent); in = new("in", this); ap = new("ap", this); prod = new("prod"); uvmc_tlm #()::connect(prod.out, "foo"); endfunction virtual task b_transport(uvm_tlm_gp t, uvm_tlm_time delay); // `uvm_info("CONSUMER/PKT/RECV",{"\n",t.sprint()},UVM_MEDIUM) // #(delay.get_realtime(1ns,1e-9)); // delay.reset(); // ap.write(t); // uvm_phase phase; prod.send(t, delay); endtask endclass module sv_main; consumer cons = new("cons"); // producer prod = new("prod"); initial begin uvmc_tlm #()::connect(cons.in, "42"); // uvmc_tlm #()::connect(prod.out, "foo"); run_test(); end endmodule5、编译运行make comp./simv注意如果编译在 uvmc_connect.cpp 263 行报错,提示错误如下那么需要将对应行代码修改为cerr << "UVMC Error: Cannot open connections file '" << filename << "'" << endl;打印输出6、关键点Systemc 和 System Verilog 的通信接口有点类似于 c++ 里面的 socket 通信一样,如果要通信,那么需要绑定到相同的一个端口上,这里的端口是一个字符串// systemc Sender sender("sender"); uvmc_connect(sender.out, "42"); Receiver receiver("receiver"); uvmc_connect(receiver.in, "foo");// system verilog consumer cons = new("cons"); uvmc_tlm #()::connect(cons.in, "42"); prod = new("prod"); uvmc_tlm #()::connect(prod.out, "foo");对于 sv 接收,需要重写 b_transport 方法,并且需要定义输入 socket 接口uvm_tlm_b_target_socket #(consumer) in; uvm_analysis_port #(uvm_tlm_generic_payload) ap; virtual task b_transport(uvm_tlm_gp t, uvm_tlm_time delay); endtask 对于 sv 发送,需要定义输出 socket 接口,并且调用 b_transport 进行发送 uvm_tlm_b_initiator_socket #() out; uvm_analysis_port #(uvm_tlm_gp) ap; run_ph.raise_objection(this); out.b_transport(t, delay); ap.write(t); run_ph.drop_objection(this);对于 sc 的接收端,需要定义输入 socket 接口,然后重写了 b_transport 方法接收数据simple_target_socket<Receiver> in; tlm_analysis_port<tlm_generic_payload> ap;对于 sc 的发送端,需要定义输出 socket 接口,然后调用 b_transport 发送simple_initiator_socket<producer> out; tlm_analysis_port<tlm_generic_payload> ap;附录: sc_module 在 verilog 中例化调用vcs 编译运行过程(1)先编译systemcsyscan -full64 -sysc=dpi_if -cpp g++ -l syscan.log -tlm2 -cflags -DVCS ${C_SRC} -cflags "${C_DEFINE} ${INCLUDE_PATH}" $(pwd)/Components/TOP.cpp:TOP 其中C_SRC 在makefile 中定义:C_SRC=$(shell find ./ -path "./csrc" -prune -o -path "./TEST" -prune -o -path "./Thirdparty" -prune -o -name '*TOP.cpp' -o -name 'main.cpp' -o -name '*.cpp' -print -o -name '*.c' -print -o -name '*.cc' -print | sed "s|^\.|$(pwd)|")C_SRC+=${VIP_ROOT_PATH}/3pt_utils/uvmc/src/connect/sc/uvmc.cppINCLUDE_PATH += -I$(VCS_HOME)/etc/systemc/accellera_install/systemc233-gcc7/include/tlm_utils(2)ln 到systemverilog 编译路径再编译systemverilog/verilogln -sTf ../../systemc/atomsimulator-main/csrc/sysc csrc/syscvcs $$XRUN_SYSC_FLIST $(COMP_OPTS) $(COMP_DEF) -f $(TBFILE) 2>&1 | tee cur_cmp.log 其中 XRUN_SYSC_FLIST="$(XRUN_SYSC_FLIST) -f ../systemc/atomsimulator-main/xrun.f"; \最后运行和一般只有systemverilog/verilog 没有区别./simv ${GUI} $(RUN_OPTS) $$COV_OPTS -l ./log/$(tc)_$$seed.log -ucli -do ../cfg/vcs_ucli.cfg \ +ntb_random_seed=$$seed +UVM_TESTNAME=$(tc) +WAVE_PATH=$(wave_path) +WAVE_MACRO=WAVE_$(wave_macro) +UVM_VERBOSITY=$(printlevel) $$VCS_FSDB_OPT $(FSDB_DBG_OTPS)附录: sc_module 在 verilog 中例化调用xrun 编译运行过程(1)生成文件列表,systemc可以和systemverilog 一起编译echo "-DSC_INCLUDE_DYNAMIC_PROCESSES -DXRUN -Wcxx,"${C_DEFINE}" ${INCLUDE_PATH} ${C_SRC} $(pwd)/Components/TOP.cpp $(pwd)/Components/TOP.v" | sed "s/ /\n/g" > xrun.ftlm 库路径:INCLUDE_PATH += -I$(XCELIUM_HOME)/tools/systemc/include/tlm_utils生成的文件列表 xrun.f 内容xrun 编译:xrun $$XRUN_SYSC_FLIST $(COMP_OPTS) $(COMP_DEF) -f $(TBFILE) 2>&1 | tee cur_cmp.log 其中:XRUN_SYSC_FLIST="$(XRUN_SYSC_FLIST) -f ../systemc/atomsimulator-main/xrun.f"; \运行和一般只有systemverilog/verilog 没有区别 xrun -R ${GUI} $(RUN_OPTS) $$COV_OPTS -l ./log/$(tc)_$$seed.log -input ../cfg/xrun_ucli.cfg \ -seed $$seed +ntb_random_seed=$$seed +WAVE_PATH=$(wave_path) +UVM_TESTNAME=$(tc) +WAVE_MACRO=WAVE_$(wave_macro) +UVM_VERBOSITY=$(printlevel) $(FSDB_DBG_OTPS); \附录: verilog module在sc 中例化调用,vcs 编译过程(顶层为sc)先编译verilog moudle 为 sc (就是转换为sc)vlogan -sysc -sc_model adder -sc_portmap the.map adder.v ${VLOGAN_EXTRA_SC} vlogan -sysc -sc_model multiplier -sc_portmap the.map multiplier.v ${VLOGAN_EXTRA_SC} 备注:VLOGAN_EXTRA_SC 可以为空然后再运行 syscsim -sysc -timescale=1ps/1ps -debug_access+all stimulus.cpp display.cpp subtracter.cpp top.cpp main.cpp -l comp.log ${SYSCAN_EXTRA} 如果verilog/systemverilog 和 sc 互相嵌套,可以在sc 调用verilog/systemverilog 中,将 verilog/systemverilog编译为sc,然后顶层如果verilog/systemverilog, 参考sc_module 在 verilog 中例化调用vcs 编译运行过程例子,编译后再运行。最后生成的fsdb 波形 可以显示systemc 时序描述这里u_TOP 就是systemc 顶层在verilog 中例化verdi 还不能直接debug systemc 源码,还需要研究————————————————部分来源于https://blog.csdn.net/yp18792574062/article/details/134375631
2025年06月06日
0 阅读
0 评论
0 点赞
2025-06-06
SystemVerilog和SystemC协同验证环境介绍(1)
先说结论:使用有公开源代码的uvmc,可以在不同仿真工具之间自由切换,vcs 也有自己的库但是只能在vcs 中使用,不能在xrun 和 子门子的EDA 仿真工具中使用。下图是一个典型的sv和sc协同验证环境的testbench。systemverilog大家都比较熟悉了,UVM就是基于sv创建的一个验证方法学的库。但是systemc用的就比较少。一般情况下,systemc用于:事务级别建模和验证HW / SW协同设计SOC架构分析和优化sv和sc协同验证环境,主要应用于:使用SystemC TL模型作为SystemVerilog测试平台中的参考模型(可重用)通过常用的SV测试平台确保RTL和SystemC TL模型的一致性SC和SV具有互操作性SC模块可以实例化SV,反之亦然具有混合语言组件的单模块层次结构SC和SV调度程序需要统一的语义混合语言系统应该像使用单一语言一样工作 引脚级:SC信号可以绑定到SV端口,反之亦然支持标准转化集使用简单,但很少能匹配设计流程要求TL:SC调用SV任务/函数,SV调用SC方法符合大多数设计流程要求更高的仿真和建模效率那么怎么将SV和SC两种不同的语言连接起来呢?大家都知道dpi可以作为c和sv之间互相访问的桥梁,那么它作为SV和SC之间的桥梁够用吗?当然不够。DPI只能调用非阻塞方法/任务/函数,但是不能调用耗时的任务/方法。仅指定C接口,而不能指定C ++,而不能指定SystemCDPI不能用于遍历SystemC层次结构,处理实例或对象不容易实现DPI构建为与单线程非时序的C程序的接口Mentor也开源了UVM Connect的库。UVM Connect是一个基于开源UVM的库,提供TLM1和TLM2连接以及SystemC和SystemVerilog UVM模型和组件之间的对象传递。它还提供了一个UVM Command API,用于从SystemC(或C或C ++)访问和控制UVM仿真。 UVM Connect允许您在UVM验证中重用SystemC架构模型作为参考模型和/或重用SystemVerilog UVM代理来验证SystemC中的模型。它还有效地扩展了您的VIP产品组合,因为您现在可以使用两种语言访问VIP。通过UVM Connect,您可以轻松开发集成的验证环境,从而充分利用每种语言的优势,最大限度地提高验证效率。UVM版本2.3增加了新的“快速打包程序”功能,可在通过TLM2连接传递通用有效负载时提高性能。它们还增加了对无限数据有效负载的支持以及对配置扩展的有限支持。附录:SV和SC语言之间的数据类型映射原文链接:https://blog.csdn.net/zhajio/article/details/81780576
2025年06月06日
6 阅读
0 评论
0 点赞
1
...
68
69
70
...
76