Mux256to1v:
Create a 4-bit wide, 256-to-1 multiplexer. The 256 4-bit inputs are all packed into a single 1024-bit input vector. sel=0 should select bits in[3:0], sel=1 selects bits in[7:4], sel=2 selects bits in[11:8], etc.
要求设计一个多路选择器,使得当sel=0时,out=in[3:0],即输入的低四位,sel=1时,out=[7:4],以此类推。
即:sel=0,out=[3:0]
sel=1,out=[7:4]
sel=2,out=[11:8]
sel=3,out=[15:12]
……
根据输入与输出的关系,可以得出关系式,输出为输入的第4*sel位到4*sel+3位,即out=[sel*4+3:sel*4]。
module top_module(
input [1023:0] in,
input [7:0] sel,
output [3:0] out );
assign out=[sel*4+3:sel*4];
endmodule
出现报错,表示向量的[a:b]中的a和b应该为常数,故查询表示截取向量中几位的方法如下:
1,表达式拼凑法:assign out={in[sel*4+3],in[sel*4+2],in[sel*4+1],in[sel*4+0]};
2,自向左截取法:assign out = in[sel*4 +: 4];即从sel*4开始,向左截取四位作为输出;“sel*4”为起始位,“+”表示向高位截取,“4”表示截取的位数。
3,自向右截取法:assign out = in[sel*4+3 -: 4];即从sel*4开始,向右截取四位作为输出;“sel*4+3”为起始位,“-”表示向低位截取,“4”表示截取的位数。
2和3两种方法可以通过改变起始位,向低位或高位(“+”或者“-”),截取位数的参数截取改变输出,达到预期的目的。