news 2026/6/10 18:37:23

verilog简单入门day9-组合逻辑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
verilog简单入门day9-组合逻辑

case1

已经给你一个BCD 的“1 位(1 个十进制数字)加法器”,名字叫bcd_fadd
它可以把两个 BCD 数字一个输入进位相加,并产生BCD 的和进位输出

module bcd_fadd ( input [3:0] a, input [3:0] b, input cin, output cout, output [3:0] sum );
module top_module( input [399:0] a, b, input cin, output cout, output [399:0] sum ); wire [99:0]c; bcd_fadd u_bcd_fadd_0( .a(a[3:0]), .b(b[3:0]), .cin(cin), .cout(c[0]), .sum(sum[3:0]) ) ; genvar i; generate for(i=1;i<100;i=i+1)begin:GEN bcd_fadd u_bcd_fadd_i( .a(a[4*i+3:4*i]), .b(b[4*i+3:4*i]), .cin(c[i-1]), .cout(c[i]), .sum(sum[4*i+3:4*i]) ) ; end endgenerate assign cout = c[99]; endmodule

case2真值表

真值表 = 把“所有可能的输入”和“对应的输出”全部列出来的表

如果输入是这样 → 输出应该是什么

想一个“最简单的开关例子”

场景:

有一个灯,两个开关AB

规则是:

只要有任意一个开关打开,灯就亮

那“真值表”在干嘛?

它只是把所有可能情况全部列出来:

两个开关,每个只有 0 / 1 两种状态

一共:

2 × 2 = 4 种情况

AB灯(out)
000
011
101
111

SOP(与或式)的规则是:
👉输出为 1 的“每一行” → 写一个 AND 项
👉把所有这些 AND 项用 OR 连起来

module top_module( input x3, input x2, input x1, // three inputs output f // one output ); assign f = (~x3&x2&~x1)| (~x3&x2&x1)| (x3&~x2&x1)| (x3&x2&x1); endmodule

case3看波形图写代码

相同为1,不同为0,同或

assign y=~(x^y);

case4

假设你正在设计一个电路,用来控制手机的铃声振动马达

当手机因为来电需要响铃时(输入ring = 1),
你的电路必须要么打开铃声,要么打开振动马达
但不能两个同时打开

如果手机处于振动模式vibrate_mode = 1),
就打开振动马达
否则(vibrate_mode = 0),
就打开铃声

尽量只使用assign语句
看看你能不能把这个“文字描述的问题”翻译成一组逻辑门。

module top_module ( input ring, input vibrate_mode, output ringer, // Make sound output motor // Vibrate ); assign ringer=(~vibrate_mode)&ring; assign motor =vibrate_mode&ring; endmodule

case5

一个冷热恒温器,用来控制加热器(冬天)空调(夏天)


Implement a circuit that will turn on and off the heater, air conditioning, and blower fan as appropriate.

实现一个电路,能正确地打开/关闭:

  • 加热器(heater)

  • 空调(air conditioner)

  • 风扇(blower fan)


The thermostat can be in one of two modes: heating (mode = 1) and cooling (mode = 0).

恒温器有两种模式:

  • 加热模式:mode = 1

  • 制冷模式:mode = 0


In heating mode, turn the heater on when it is too cold (too_cold = 1) but do not use the air conditioner.

加热模式下:

  • 如果太冷(too_cold = 1),打开加热器

  • 绝不能打开空调


In cooling mode, turn the air conditioner on when it is too hot (too_hot = 1), but do not turn on the heater.

制冷模式下:

  • 如果太热(too_hot = 1),打开空调

  • 绝不能打开加热器


When the heater or air conditioner are on, also turn on the fan to circulate the air.

只要加热器 或 空调打开了:

  • 风扇也要打开(用来送风)


In addition, the user can also request the fan to turn on (fan_on = 1), even if the heater and air conditioner are off.

另外:

  • 即使加热器和空调都关着

  • 用户也可以手动请求打开风扇(fan_on = 1


Try to use only assign statements…

尽量只用assign,把文字描述翻译成逻辑门。

module top_module ( input too_cold, input too_hot, input mode, input fan_on, output heater, output aircon, output fan ); assign heater=mode&too_cold; assign aircon=(~mode)&too_hot; assign fan = heater|aircon|fan_on; endmodule

case6

统计1

module top_module( input [2:0] in, output [1:0] out ); integer i; always@(*)begin out=0; for(i=0;i<3;i=i+1)begin if(in[i]) out = out+1; end end endmodule

case7

out_both的每一位表示:
当前输入位它左边的邻居(索引更大的那一位)是否都为 1

out_any的每一位表示:
当前输入位它右边的邻居(索引更小的那一位)是否至少有一个是 1

out_different的每一位表示:
当前输入位是否和左边的邻居不同。

module top_module( input [3:0] in, output [2:0] out_both, output [3:1] out_any, output [3:0] out_different ); integer i ; always@(*)begin for(i=0;i<3;i=i+1)begin out_both[i]=in[i]&in[i+1]; end end always@(*)begin for(i=1;i<4;i=i+1)begin out_any[i]=in[i]|in[i-1]; end end always@(*)begin for(i=0;i<4;i=i+1)begin out_different[i]=(i==3)?in[i]^in[0]:in[i]^in[i+1]; end end endmodule
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:29:39

EmotiVoice在短视频配音中的高效应用案例

EmotiVoice在短视频配音中的高效应用案例 在抖音、快手、TikTok等平台日均产生数亿条短视频的今天&#xff0c;内容创作者正面临一个核心挑战&#xff1a;如何以极低成本、极高效率地生成富有感染力的配音&#xff1f;传统依赖真人录音或通用语音合成工具的方式&#xff0c;要么…

作者头像 李华
网站建设 2026/6/10 12:33:23

Material Kit轮播图3大痛点解析:如何用5步打造专业级动态展示

Material Kit轮播图3大痛点解析&#xff1a;如何用5步打造专业级动态展示 【免费下载链接】material-kit Free and Open Source UI Kit for Bootstrap 5, React, Vue.js, React Native and Sketch based on Googles Material Design 项目地址: https://gitcode.com/gh_mirro…

作者头像 李华
网站建设 2026/6/9 22:55:31

EmotiVoice能否实现多人对话同步生成?群组语音功能设想

EmotiVoice 能否实现多人对话同步生成&#xff1f;群组语音功能设想 在虚拟主播直播中&#xff0c;观众常看到多个 AI 角色同屏互动&#xff1b;在有声剧中&#xff0c;旁白与角色对白交错推进情节&#xff1b;在智能客服培训系统里&#xff0c;AI 模拟客户、主管与员工三方辩论…

作者头像 李华
网站建设 2026/6/10 12:57:21

Python实战-学生信息管理系统开发(Tkinter+Json)

本项目是一个基于Python Tkinter的图形化学生信息管理系统&#xff0c;实现学生信息的增删改查、数据保存和文件导出等功能。 这个学生信息管理系统的逻辑非常简单&#xff0c;它就像一个电子笔记本&#xff1a;所有学生信息都记在一个列表里&#xff0c;并自动保存成一个文件&…

作者头像 李华
网站建设 2026/6/9 20:10:19

导热系数测试仪厂家推荐排行榜:2025最新口碑单深度解析

在选择导热系数测试仪时&#xff0c;企业常常面临诸多困扰。比如&#xff0c;测试结果不准确&#xff0c;影响产品研发进度&#xff1b;设备稳定性差&#xff0c;频繁出现故障耽误生产&#xff1b;售后服务不及时&#xff0c;遇到问题无法快速解决。为了帮助企业快速找到靠谱的…

作者头像 李华
网站建设 2026/6/10 14:27:21

Java中Set集合的概念

java.util.Set 是 Java 集合框架的子接口&#xff0c;继承自 Collection 接口&#xff0c;核心特征是存储的元素无序且不可重复&#xff0c;不支持通过索引访问元素。 一、核心特性 1. 元素唯一性 Set 集合不允许存储重复元素&#xff0c;判断元素是否重复的依据是 equals…

作者头像 李华