欢迎光临散文网 会员登陆 & 注册

HDLBits (56) — 响铃还是震动?

2022-02-28 17:58 作者:僚机Wingplane  | 我要投稿

本题链接:

https://hdlbits.01xz.net/wiki/Ringer

假设你正在设计一个电路来控制手机的振铃器和振动马达。无论何时,只要电话需要从来电中响起(输入ring),电路必须接通振铃器(输出ringer=1)或电机(输出motor=1),但不是两者都有。如果手机处于振动模式(输入vibrate_mode =1),请打开电机。否则,打开振铃器。

尝试只使用 assign 语句,以查看是否可以将问题描述转换为逻辑门集合。

设计提示: 在设计电路时,人们经常会想到“向后”的问题,从输出开始,然后向后工作到输入。这通常与人们对(顺序的、命令式的)编程问题的看法相反,在这个问题中,人们首先看到输入,然后决定一个动作(或输出)。对于顺序程序,人们通常认为“如果(输入是 _ _) ,那么(输出应该是 _ _)”。另一方面,硬件设计师经常认为“当(输入是 _ _)时(输出应该是 _ _)”。

上面的问题描述是以一种适合软件编程的命令形式编写的(如果是 ring,那么就这样做) ,因此你必须将其转换为一种更加适合硬件实现的声明形式(assign ringer = ___)。能够思考和转换这两种风格,是硬件设计所需的最重要的技能之一。

预期解决方案长度:大约2行。

题目

提示:

对于这个特殊的问题,我们应该考虑“motor 在___时打开”,而不是“如果(vibrate mode)那么___”。

答案

输出波形

按位操作符包括:取反(~),与(&),或(|),异或(^),同或(~^)。

按位操作符对 2 个操作数的每 1bit 数据进行按位操作。

如果 2 个操作数位宽不相等,则用 0 向左扩展补充较短的操作数。

取反操作符只有一个操作数,它对操作数的每 1bit 数据进行取反操作。

下图给出了按位操作符的逻辑规则。

参考内容:

2.4 Verilog 表达式 | 菜鸟教程:

https://www.runoob.com/w3cnote/verilog-expression.html

HDLBits (56) — 响铃还是震动?的评论 (共 条)

分享到微博请遵守国家法律