题解 | #四选一多路器#

四选一多路器

http://www.nowcoder.com/practice/cba4617e1ef64e9ea52cbb400a0725a3

题意整理

本题要求设计一个四选一的多路器,注意输出的定义是线网类型,因此不能使用always组合逻辑块,但是实际上,在语言中使用reg并不一定会被综合成寄存器。

题解主体

可以得到状态转换:
d0    11
d1    10
d2    01
d3    00
根据激励方程和输出方程以及思路整理,关键电路如下:



通过2/1选择器进行判断,需要三个这种结构
将电路转换成Verilog代码描述如下:
wire [1:0]line1,line2;
assign line1 = (sel[1]) ? d0 : d2;
assign line2 = (sel[1]) ? d1 : d3;
assign mux_out = (sel[0]) ? line1 : line2;
因此实现方式为如下的电路,综合得到:


参考答案

`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
wire [1:0]line1,line2;
assign line1 = (sel[1]) ? d0 : d2;
assign line2 = (sel[1]) ? d1 : d3;
assign mux_out = (sel[0]) ? line1 : line2;
endmodule


全部评论
因为verilog代码是并行执行的,那么会不会出现没有第8行和第9行没运行完的时候已经运行了第10行的情况?
点赞 回复 分享
发布于 2024-02-22 14:30 北京
你好,请问这里为什么要使用三目运算符的时候为什么sel[0]那里需要加括号?
点赞 回复 分享
发布于 2023-02-17 09:46 天津
初学者默默路过
点赞 回复 分享
发布于 2022-06-27 00:38

相关推荐

评论
48
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务