news 2026/4/15 13:15:11

verilog简单入门day7

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
verilog简单入门day7

今天我们先尝试一下debug

这是代码块示意图

这是原代码

always @(*) begin if (cpu_overheated) shut_off_computer = 1; end always @(*) begin if (~arrived) keep_driving = ~gas_tank_empty; end

可以发现这个代码无法实现图片功能,因此我们需要进行修改,有两个latch(锁存器),

组合逻辑在任何情况下,所有输出都必须被赋值。

这通常意味着:

  • 必须写else

  • 或者在always一开始给一个default 值

eg1

always @(*) begin shut_off_computer = 1'b0; // 默认值 if (cpu_overheated) shut_off_computer = 1'b1; end

case1 case语句

Verilog 中的case 语句,在功能上几乎等价于一串
if – else if – else,用于将一个表达式多个候选值进行比较。

eg2

module top_module ( input [2:0] sel, input [3:0] data0, input [3:0] data1, input [3:0] data2, input [3:0] data3, input [3:0] data4, input [3:0] data5, output reg [3:0] out );// always@(*) begin // This is a combinational circuit out=4'b0; case(sel) 3'b000:begin out = data0; end 3'b001:begin out = data1; end 3'b010:begin out = data2; end 3'b011:begin out = data3; end 3'b100:begin out = data4; end 3'b101:begin out = data5; end endcase end endmodule

case2实现一个优先编码器

优先编码器(priority encoder)是一种组合逻辑电路
当输入一个比特向量(bit vector)时,
它会输出第一个为 1 的比特所在的位置

module top_module ( input [3:0] in, output reg [1:0] pos ); always @(*)begin pos=2'b0; case(in) 4'b0000:begin pos = 2'd0; end 4'b0001:begin pos = 2'd0; end 4'b0011:begin pos = 2'd0; end 4'b1001:begin pos = 2'd0; end 4'b0101:begin pos = 2'd0; end 4'b1101:begin pos = 2'd0; end 4'b1011:begin pos = 2'd0; end 4'b0111:begin pos = 2'd0; end 4'b1111:begin pos = 2'd0; end 4'b0010:begin pos = 2'd1; end 4'b1010:begin pos = 2'd1; end 4'b0110:begin pos = 2'd1; end 4'b1110:begin pos = 2'd1; end 4'b0100:begin pos = 2'd2; end 4'b1100:begin pos = 2'd2; end 4'b1000:begin pos = 2'd3; end endcase end endmodule

用if语句更简单

module top_module ( input [3:0] in, output reg [1:0] pos ); always @(*) begin if (in[0]) pos = 2'd0; else if (in[1]) pos = 2'd1; else if (in[2]) pos = 2'd2; else if (in[3]) pos = 2'd3; else pos = 2'd0; // in 全 0 的情况,必须有 end endmodule

casez支持高阻输入,当成?来处理

module top_module ( input [7:0] in, output reg [2:0] pos ); always@(*)begin pos = 3'b0; casez(in) 8'b00000000:pos = 3'd0; 8'bzzzzzz10:pos = 3'd1; 8'bzzzzz100:pos = 3'd2; 8'bzzzz1000:pos = 3'd3; 8'bzzz10000:pos = 3'd4; 8'bzz100000:pos = 3'd5; 8'bz1000000:pos = 3'd6; 8'b10000000:pos = 3'd7; endcase end endmodule

case3 游戏编辑器

假设你正在为一个游戏设计电路,用来处理PS/2 键盘传来的扫描码(scancode),给定最近接收到的两个字节(16 位)的扫描码
你需要判断是否有某个方向键被按下。扫描码与方向键的对应关系

Scancode (16-bit)方向键
16'he06b
16'he072
16'he074
16'he075
其他
module top_module ( input [15:0] scancode, output reg left, output reg down, output reg right, output reg up ); always@(*)begin left = 0; down = 0; right = 0; up = 0; case(scancode) 16'he06b:left = 1'b1; 16'he072:down = 1'b1; 16'he074:right = 1'b1; 16'he075:up = 1'b1; endcase end endmodule
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 13:15:08

火山引擎AI大模型SDK连接Qwen3-VL-30B进行混合推理

火山引擎AI大模型SDK连接Qwen3-VL-30B进行混合推理 在智能应用日益复杂的今天,用户不再满足于“看图识字”式的浅层交互。他们期望系统能真正理解一张财报中的趋势变化、一张医学影像里的病灶演化,甚至一段教学视频中图文并茂的逻辑推导。这种对深层语义…

作者头像 李华
网站建设 2026/4/15 13:13:12

NCM格式转换专业指南:从原理到实践的全方位解决方案

NCM格式转换工具作为网易云音乐用户必备的离线音乐管理利器,其核心技术在于对加密音频文件的解析与转换。本文将深入解析NCM文件的加密机制,提供完整的转换方案,并分享专业级的使用技巧。 【免费下载链接】ncmdump 项目地址: https://gitc…

作者头像 李华
网站建设 2026/4/14 3:27:25

如何用Qwen3-14B实现高效多步骤任务规划?技术博客分享

如何用 Qwen3-14B 实现高效多步骤任务规划? 在企业智能化转型的浪潮中,一个日益突出的问题浮出水面:如何让 AI 不只是“能说会道”,而是真正“能做实事”?我们不再满足于模型生成一段流畅回复,而是期待它能…

作者头像 李华
网站建设 2026/4/12 15:29:35

基于HuggingFace镜像网站一键拉取GPT-OSS-20B模型的方法

基于HuggingFace镜像网站一键拉取GPT-OSS-20B模型的方法 在大语言模型迅速普及的今天,一个现实问题始终困扰着国内开发者:如何高效、稳定地获取像 GPT-OSS-20B 这样动辄数十GB的开源模型?官方 Hugging Face 仓库虽功能强大,但跨国…

作者头像 李华
网站建设 2026/4/15 4:08:18

GitHub开源vLLM镜像仓库,每日自动同步更新

GitHub开源vLLM镜像仓库,每日自动同步更新 在大模型落地进入深水区的今天,企业不再只关心“能不能跑通一个Demo”,而是真正追问:“能不能扛住每天百万级请求?”、“7B模型能否在8GB显卡上稳定运行?”、“上…

作者头像 李华