2 选1多路选择器
设计一位宽2选1多路选择器。选择信号sel为0时,输出信号a;选择信号sel为1时,输出信号b。
参考答案
// synthesis verilog_input_version verilog_2001//-----------------------------------------------------------------------------// 模块名称:top_module// 功能概述:二选一多路选择器(MUX2_1),通过sel选择通路输出a或b// 逻辑规则:选择端sel=0输出a;sel=1输出b,纯组合逻辑实时切换//-----------------------------------------------------------------------------moduletop_module(input a,// 输入通路0信号input b,// 输入通路1信号input sel,// 通路选择控制端:0选a、1选boutput out// 多路选择结果输出);// 三元运算符实现二选一:sel成立取b,反之取aassign out=sel?b:a;endmodule输出结果
100位位宽 2 选 1 多路选择器
搭建一个 100 位宽的二选一多路选择器。sel=0 输出选输入a,sel=1输出选输入b。
参考答案
// synthesis verilog_input_version verilog_2001//-----------------------------------------------------------------------------// 模块名称:top_module// 功能概述:100位总线型2选1多路选择器,sel控制两组宽位总线整体切换输出// 逻辑规则:sel=0输出总线a;sel=1输出总线b,整位宽同步选择,纯组合逻辑实时响应//-----------------------------------------------------------------------------moduletop_module(input[99:0]a,// 第1路100位并行输入总线input[99:0]b,// 第2路100位并行输入总线input sel,// 通路选择控制端:0选a总线、1选b总线output[99:0]out// 选中的100位总线输出);// 条件运算符批量选通整条总线,所有比特同步切换通路assign out=sel?b:a;endmodule输出结果
9 选 1 多路选择器
设计一个16位宽、9选1多路选择器。选择信号sel等于0时选择输入a,sel等于1时选择输入b,sel等于2时选择输入c,以此类推。对于未使用的选择情况(sel 取值 9 至 15),将输出所有位全部置为1。
参考答案
// synthesis verilog_input_version verilog_2001//-----------------------------------------------------------------------------// 模块名称:top_module// 功能概述:9路16bit总线9选1多路选择器,4位选择端sel寻址通路// 逻辑规则:sel=0~8依次选通a~i共9组输入总线;sel=9~15默认输出16bit全高电平// 设计特性:组合逻辑case分支实现,所有输入位宽统一16位,共用一组选择信号//-----------------------------------------------------------------------------moduletop_module(input[15:0]a,b,c,d,e,f,g,h,i,// 9路待选16位并行输入总线input[3:0]sel,// 4位选择控制端,寻址选中通路output reg[15:0]out// 16位选择结果输出,reg型适配always赋值);// 组合逻辑case分支多路选通,*敏感列表覆盖所有输入变化always @(*)begincase(sel)4'd0:out=a;4'd1:out=b;4'd2:out=c;4'd3:out=d;4'd4:out=e;4'd5:out=f;4'd6:out=g;4'd7:out=h;4'd8:out=i;// 剩余7个未使用寻址值统一兜底输出16位全1default:out={16{1'b1}};endcase end endmodule输出结果
256 选 1 多路选择器
设计一个1位宽、256选1的数据选择器。256路输入全部整合为一个256位输入向量。选择信号sel等于0时选取输入向量第0位in[0],sel等于1时选取输入向量第1位in[1],sel等于2时选取输入向量第2位in[2],以此类推。
参考答案
// synthesis verilog_input_version verilog_2001//-----------------------------------------------------------------------------// 模块名称:top_module// 功能概述:256选1单比特多路选择器,8位选择端sel寻址256bit向量指定位输出// 逻辑规则:sel取值0~255作为动态索引,直接读取in对应下标比特输出,纯组合逻辑//-----------------------------------------------------------------------------moduletop_module(input[255:0]in,// 256路单比特整合的并行输入总线,位序in[255]高位~in[0]低位input[7:0]sel,// 8位选择控制端,寻址范围0~255,完整覆盖全部输入下标output out// 单比特输出,输出sel索引选中的总线比特);// 动态下标寻址:sel直接作为索引,提取in对应位置的单路信号输出assign out=in[sel];endmodule输出结果
区间切片遇到信号做索引时,可以转换为:把要截取的连续 W 位,拆成 W 个单独单 bit 变量索引,分别赋值给输出向量每一位
4 位位宽 256 选 1 多路选择器
设计一个4位位宽、256选1的数据选择器。256组4位输入全部整合在一个1024位的输入向量中。选择信号sel为0时选取输入向量的第0至3位,sel为1时选取第4至7位,sel为2时选取第8至11位,以此类推。
参考答案
// synthesis verilog_input_version verilog_2001//-----------------------------------------------------------------------------// 模块名称:top_module// 功能概述:分段式4位宽多路选择器,1024bit输入按连续4bit分组,sel选中一组整体输出// 逻辑规则:sel为组编号,每组固定4比特偏移0~3,读取in[sel*4+3:sel*4]作为out输出// 位宽验算:sel取值0~255,256组×4bit=1024bit,刚好匹配输入总线总长//-----------------------------------------------------------------------------moduletop_module(input[1023:0]in,// 1024位超长输入总线,按每4位划分为独立数据组input[7:0]sel,// 8位组选择索引,范围0~255,选中对应4bit分组output[3:0]out// 4bit分组并行输出端口);// 按组内固定偏移逐位索引:同一sel对应连续4个下标,拼接成完整4bit输出assign out[0]=in[sel*4+0];assign out[1]=in[sel*4+1];assign out[2]=in[sel*4+2];assign out[3]=in[sel*4+3];endmodule