module find_first
#(
parameter WIDTH = 6
)(
input [WIDTH-1:0] req,
output [WIDTH-1:0] grant
);
genvar i;
if(lsb_first)
begin:lsb_to_msb
assign grant[0] = req[0];
for(i=1;i<WIDTH;i=i+1)begin
grant[i] = req[i] & ~|grant[i-1:0];
end
end
else if(!lsb_first)
begin:msb_to_lsb
assign grant[WIDTH-1] = req[WIDTH-1];
for(i=WIDTH-2;i>0;i=i-1)begin
grant[i] = req[i] & ~|grant[WIDTH-1:i+1];
end
end
endmodule
verilog手撕代码——找出高位或低位第一个出现1
最新推荐文章于 2023-08-14 17:01:07 发布
这篇博客介绍了一个模块,名为`modulefind_first`,它根据`lsb_first`参数的不同,实现从最低有效位到最高有效位(LSB_to_MSB)或从最高有效位到最低有效位(MSB_to_LSB)的grant信号计算。通过for循环和位操作,确保了输入请求(req)的逐位赋值到输出grant信号中。
摘要由CSDN通过智能技术生成