news 2026/6/15 19:06:15

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/6/15 17:11:01

分布式系统认证难题的云原生解决方案:Ory Hydra与APISIX深度集成实践

在微服务架构日益普及的今天,分布式系统的身份认证与授权已成为技术团队面临的核心挑战。传统的单体应用认证方案在分布式环境下显得力不从心,而云原生技术栈为这一难题提供了优雅的解决方案。本文将深入探讨如何通过Ory Hydra与APISIX的完美组合&#x…

作者头像 李华
网站建设 2026/6/15 12:12:59

从HTML前端调用FLUX.1-dev图像生成API的技术实现路径

从HTML前端调用FLUX.1-dev图像生成API的技术实现路径 在创意工具日益智能化的今天,越来越多的产品希望将“输入一句话,输出一幅画”这样的能力无缝嵌入网页中。用户不再满足于静态内容浏览,而是期待实时、直观、低门槛的AI交互体验——比如在…

作者头像 李华
网站建设 2026/6/15 2:17:18

用CUPP提升你的密码安全性!

CUPP - Common User Passwords Profiler 项目简介 CUPP(Common User Passwords Profiler)是一个专注于用户密码剖析的工具,它旨在帮助用户了解和识别常见的弱密码,进而提高用户账户的安全性。现代网络应用中,用户名和密…

作者头像 李华
网站建设 2026/6/15 18:42:13

本地化部署Qwen3-8B:结合Ollama和Docker的最佳实践

本地化部署Qwen3-8B:结合Ollama和Docker的最佳实践 在企业对数据隐私与系统响应速度要求日益严苛的今天,依赖云端API调用大语言模型(LLM)的方式正逐渐暴露出其局限性。尤其在金融、医疗和政务等高敏感场景中,将核心AI…

作者头像 李华
网站建设 2026/6/15 13:16:19

Qwen3-14B vs 其他14B模型:谁更适合企业级应用开发?

Qwen3-14B vs 其他14B模型:谁更适合企业级应用开发? 在AI从实验室走向产线的今天,一个现实问题摆在企业技术负责人面前:如何在有限预算下,部署一个既智能又稳定、能真正融入业务流程的大模型? 7B太弱&…

作者头像 李华