零散笔记整理

1、wire和reg的区别和使用场景

在Verilog中,wire和reg是两种基本的数据类型,它们的区别和用途与硬件描述的逻辑特性密切相关。

1、核心区别

特性wirereg
赋值方式只能通过连续赋值(assign)或模块端口连接赋值只能在过程块(always、initial)中赋值
物理意义电路中的物理连线(无存储能力)表示存储状态(可能是寄存器组合逻辑
默认值zx(未初始化)
综合结果连线或组合逻辑组合逻辑或时序逻辑(如触发器)

2、使用场景

(1)使用wire

        模块间的信号连接:当信号需要跨模块传递时,必须使用wire(例如模块的输入输出端口);

        组合逻辑的连续赋值:使用assign语句直接描述组合逻辑时,目标信号必须是wire。

        testbench中,DUT的输出信号,需要用wire;

(2)使用reg

        时序逻辑(寄存器):在时序逻辑的always块中赋值的信号必须使用reg,综合后通常对应寄存器;

        组合逻辑的过程赋值:在组合逻辑的always块中赋值的信号也需声明为reg,尽管综合后为组合逻辑;

reg comb_out;
     always @(*)

begin
                                               comb_out = a & b;  // 组合逻辑,但必须用reg

end

        临时变量存储:在过程块(如always或initial)中需要暂存值的变量必须用reg。

  reg temp;
  always @(posedge clk) begin
    temp = a + b;  // 临时计算值
    q <= temp;
  end

备注:1、reg在时序逻辑中可能对应寄存器,但是在组合逻辑中只是语法要求,实际是组合电路;

           2、输入端口只能是wire,输出端口可以是reg(若是在过程块中赋值)。

 testbench中,即使是输入信号,但是是用initial赋值,也需要用reg;

2、阻塞赋值=和非阻塞赋值<=

1、阻塞赋值=

        执行顺序:顺序执行,立即生效;

        适用场景:组合逻辑设计;

2、非阻塞赋值<=

        执行顺序:并行执行,赋值在代码块结束时统一更新;

        适用场景:时序逻辑设计;

禁止混用:同一代码块中避免回合使用=和<=,可能导致不可预测结果

帮我查找有没有ai痕迹。 2025-12-1—12-6本周主要任务是把ESP32的温湿度采集和OneNET上报跑通,过程很散:先搭环境,idf.py build 一开始报 IDF_PATH not set(解决:在 PowerShell 里 setx IDF_PATH "C:\esp\esp-idf",重开终端后能找到),装依赖时碰到 ERROR: Could not find a version that satisfies the requirement cryptography,最后用 pip install --upgrade pip 然后重新装就过了;接着是传感器调试,DHT22 有时返回 DHT read timeout 或 Checksum failed,读三次取中位数能减少假值,BME280 的 I2C 有一次出现 NACK on address,怀疑焊点接触不良,拔插后恢复,已在板上加了注释“检查 I2C 拉电阻/焊点”;MQTT 连接到 OneNET 时偶发 connack return code=5(Not authorized)和 rc=-2(网络不可达),改了鉴权顺序并把 keepalive 调短到 30s,加入断连回调和间隔递增的重连策略(实现为:第一次 2s,第二次 5s,再来 10s,最大 60s),同时实现一个简单的本地队列 push_queue[] 缓存未上报的 JSON,重连后先发队列;JSON 组装原先用 sprintf,发现有 output truncated 的风险,改用 snprintf 并把 payload_size 传入接口,遇到 snprintf 返回值 >= buf_size 的情况就记录一条错误并丢弃那条数据(后面再想办法拆包);上报格式用 {"id":"123","version":"1.0","params":{"temp":{"value":xx.xx}}},保留两位小数,测试台能在 OneNET 控制台看到数据但有时候延迟几分钟才显现(疑似平台缓存或网络抖动);调试时写了不少碎笔记,比如 wifi_connect() sometimes hangs - add timeout、TODO: check power filter cap、临时fix: cache push on disconnect、还有一个半句“如果还是不行就——”留着没写完;总体上问题集中在网络不稳、传感器偶发异常和缓冲区处理这三块,解决方案是增加重试与缓存、用更安全的字符串操作、以及把硬件接触问题列入待查清单;下周计划先把缓存机制从循环数组改成小型环形队列,写个断网/传感器异常的测试脚本模拟场景,开始看OTA实现(先读 OneNET 文档),并把零散笔记整理到 README.md,需要确认最终传感器型号和 OneNET 的产品鉴权信息才能做全面联调。
12-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值