struct union enum
📅 2026/7/15 4:55:54
👁️ 次浏览
1.定义一个枚举类型port_id_e使用二值逻辑指定位宽能够容纳 4 个端口PORT0, PORT1, PORT2, PORT3并显式赋值。typedef enum bit [1:0]{ PORT0 2b00 , PORT1 2b01 , PORT2 2b10 , PORT3 2b11 } port_id_e; port_id_e my_port; initial begin my_port PORT1; $display([TB_MSG] Current active port is:%s(value %0d),my_port.name(),my_port); endmy_port.name(),SV 内置的枚举方法。Makefile模板# # 标准基础 Makefile 模板 # # 1. 定义当前要测试的源文件下次你换别的文件只需要改这一个地方 FS_SRC enum_1.sv # 2. 定义工具链命令与参数 # -sverilog: 支持系统Verilog语法 # -debug_accessall -kdb: 开启全部调试权限并生成KDB数据库这是Verdi能看波形和代码的关键 VCS vcs -sverilog -debug_accessall -kdb -l vcs.log VERDI verdi -sv $(FS_SRC) -ssf tb_top.fsdb .PHONY: compile sim wave clean all # 默认执行编译和仿真 all: compile sim # 编译步骤 compile: $(VCS) $(FS_SRC) # 仿真运行步骤 sim: ./simv -l sim.log # 一键拉起 Verdi wave: $(VERDI) # 清理垃圾文件 clean: rm -rf csrc simv* *.log *.fsdb ucli.key verdiLog Novas*my_port.name()打印出来的是带有可读性的文本定义一个合并结构体typedef struct packed名为packet_s里面包含三个成员1 位的有效信号valid你刚刚定义的枚举类型port_id8 位的字段data。module tb_top; typedef enum bit [1:0]{ PORT0 2b00, PORT1 2b01, PORT2 2b10, PORT3 2b11 }port_id_e; typedef struct packed{ bit valid; port_id_e my_port; bit [7:0] data; }packet_s; packet_s my_packet; initial begin $display(simulation started); my_packet.valid 1b0; my_packet.my_port PORT0; my_packet.data 8h00; #10; my_packet.valid 1b1; my_packet.my_port PORT2; my_packet.data 8h5A; #10; my_packet.valid 1b0; my_packet.my_port PORT3; my_packet.data 8h3B; $display([TB_INFO] my_port is %s (num %0d) data 0x%h, my_packet.my_port.name(), my_packet.my_port, my_packet.data ); $display([TB_INFO]my_packet raw bits stream %b,my_packet); #10; $display(simulation finished); $finish; end initial begin $fsdbDumpfile(tb_top.fsdb); $fsdbDumpvars(0,tb_top); end endmodule3.always (posedge clk) begina a 1;$display(Display a %0d, a);$strobe (Strobe a %0d, a);end$display和$strobe打印出来的a的值会是一样的吗如果不一样哪个打印出的是旧值哪个打印出的是变化后的新值为什么这个内容涉及到了 Verilog/SV 的仿真调度事件队列Event Queue是验证工程师必懂的底层逻辑。不一样,$display打印出来的是旧值或者是中间变化值。$strobe打印出来的是变化后的新值最终稳定值。代码写得不符合硬件规范,在时钟沿触发的always块里工业界标准必须使用非阻塞赋值a a 1;。1.Active区域在 Active 区域非阻塞赋值只会“右边采样”它知道a将要变成 1但还没真正塞给左边。此时执行$display它去内存里读读到的依然是旧值0。NBA 区域Nonblocking Assignment, 非阻塞赋值更新区域如果用了a a 1;仿真器在这个区域才会真正把1赋给a。Postponed 区域延后区域这是整个时间步Time-slot的最后最后一步。无论前面是用阻塞赋值还是非阻塞赋值无论中间经历了多少次抖动$strobe都会冷眼旁观,直到这个时间点要结束的最后一刻它才去瞄一眼内存把最终稳定下来的新值1打印出来。当我们在时钟沿(posedge clk)想要观察一组信号稳定后的最终状态时必须且只能使用$strobe。它能完美避开任何仿真调度导致的竞争确保你看到的和波形图上稳定后的值绝对一致。结构体和合并结构体代码typedef struct { bit [7:0] r; bit [7:0] g; bit [7:0] b; } pixel_s; pixel_s my_pixel; my_pixel {8h10, 8h10, 8h10}; typedef struct packed{ bit [7:0] r; bit [7:0] g; bit [7:0] b; } pixel_s; pixel_s my_pixel; my_pixel {8h10,8h10,8h10, };module tb_top; typedef struct packed{ bit [7:0] r ; bit [7:0] g ; bit [7:0] b ; } pixel_s; pixel_s my_pixel; initial begin #10; my_pixel {8h10,8h20,8h30}; $display([TB_INFO] r%0h,g%0h,b%0h,my_pixel.r,my_pixel.g,my_pixel.b); #10; $finish; end initial begin $fsdbDumpfile(tb_top.fsdb); $fsdbDumpvars(0,tb_top); end endmodule
1. 项目概述:为什么我们需要PyWxDump?如果你曾经因为电脑崩溃、系统重装,或者只是想换个新电脑,而面临微信聊天记录“搬家”的难题,那你一定懂那种无力感。微信PC版把我们的聊天记录、图片、文件都加密存储在本地&…
📅 2026/7/15 4:55:54
1. 项目概述:从“变量”与“常量”开始,构建你的C世界观如果你刚开始接触C,或者从其他语言(比如Python)转过来,可能会觉得“变量”和“常量”这两个概念太基础了,不就是给数据起个名字、存个值吗…
📅 2026/7/15 4:54:54
1. F16非线性模型基础认知第一次打开F16的Simulink模型压缩包时,相信很多人都会被里面杂乱的文件搞得一头雾水。我刚开始接触这个项目时也是这样,直到发现一个实用小技巧:在MATLAB文件浏览器中右键点击"名称"列右侧空白处ÿ…
📅 2026/7/15 4:54:54
1. 项目概述:当C发布版本遭遇“薛定谔的崩溃”干了这么多年C,最让人头疼的不是写不出功能,而是功能写出来了,在开发机上跑得风生水起,一到生产环境或者交给测试同事,就时不时给你来个“薛定谔的崩溃”——时…
📅 2026/7/15 5:38:17
文章目录前言代码讲解页面入口怎么安排数据模型先稳住状态变量控制页面反馈布局代码不要从样式开始读Builder 和方法承担复用使用方式完整代码关键代码解析interface 不是摆设State 是交互的开关列表和卡片要靠数据驱动事件回调要短一点样式参数别急着抽常量总结前言
Slider 很…
📅 2026/7/15 5:38:17
1. 项目概述:为什么AR Foundation是Unity AR开发的基石?如果你正在用Unity做AR应用,或者正打算入坑,那么“AR Foundation”这个名字你一定不陌生。但很多人可能只是把它当作一个“插件”来用,照着教程把预制件拖进场景…
📅 2026/7/15 5:38:17
文章目录前言代码讲解页面入口怎么安排数据模型先稳住状态变量控制页面反馈布局代码不要从样式开始读Builder 和方法承担复用使用方式完整代码关键代码解析interface 不是摆设State 是交互的开关列表和卡片要靠数据驱动事件回调要短一点样式参数别急着抽常量总结前言
进度条不…
📅 2026/7/15 5:38:17
1. 项目概述:为什么从零构建一个Matrix类?在C的世界里,处理数学运算,尤其是线性代数中的矩阵运算,是图形学、机器学习、物理仿真等领域的家常便饭。你可能用过Eigen、OpenCV的Mat,或者Armadillo这些成熟的库…
📅 2026/7/15 5:38:17
1. MOTEC伺服驱动器多轴PLC主从控制解决方案
MOTEC智能伺服驱动器内部集成了PLC功能,可以利用梯形图编程进行PLC编程,用户无需动控制器就可以轻松构建运动控制系统。MOTEC内置PLC功能不但提供单机版的控制功能,还可以通过高速总线构建多机主从…
📅 2026/7/15 5:37:17
1. COM线程模型基础与CoInitializeEx核心作用在Windows平台开发中,组件对象模型(COM)的线程处理机制一直是开发者必须掌握的底层知识。作为COM初始化的门户函数,CoInitializeEx不仅决定了对象在何种线程环境下运行,更影响着整个组件的并发性能…
📅 2026/7/15 0:00:17
1. 为什么M芯片Mac用户需要降级到Monterey? 去年刚拿到M2芯片的MacBook Pro时,我第一时间升级到了Ventura系统。结果第三天就遇到了微信闪退、Final Cut Pro渲染卡顿的问题。后来在开发者论坛发现,不少专业软件对Ventura的适配都存在问题。这…
📅 2026/7/15 0:00:17
1. 背景与核心概念在AI大模型快速发展的今天,许多开发者和研究者都面临一个现实问题:如何在有限的硬件预算下实现高效的本地大模型部署。特别是对于个人开发者和小型团队来说,购买最新的高端显卡成本高昂,而利用现有的或二手硬件资…
📅 2026/7/15 0:00:17
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/14 6:35:02
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/14 12:06:52
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/14 7:15:18
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/14 15:11:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/15 2:24:18
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/14 15:11:56