本文主要是介绍HDLBits 练习 Mux256to1v,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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.
一开始我的写法:
module top_module( input [1023:0] in,input [7:0] sel,output [3:0] out );assign out = in[sel*4+3:sel*4];endmodule
然后就报错了
Error (10734): Verilog HDL error at top_module.v(5): sel is not a constant File:
然后查了一下,好像是说假如向量A,那么A[a:b]中的a和b必须是常量。但是这样A[a]是可以的。
因此,此题可以这样写,用四个1bit拼接。
module top_module( input [1023:0] in,input [7:0] sel,output [3:0] out );assign out = {in[sel*4+3],in[sel*4+2],in[sel*4+1],in[sel*4]};
endmodule
后面看了下还有其他两种写法
module top_module( input [1023:0] in,input [7:0] sel,output [3:0] out );assign out = in[sel*4+:4];
endmodule
这个表示 从 sel4 开始,选择比特序号大于sel4 的 4 位比特,相当于[sel4+3:sel4];
assign out = in[sel*4+3-:4];
这个表示 从 sel4+3 开始,选择比特序号小于 sel4+3 的 4 位比特,相当于[sel4+3:sel4];
这篇关于HDLBits 练习 Mux256to1v的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!