verilog 的一个语法,其中的parameter N = 2**M 什么意思?

delacrxoix_xu delacrxoix_xu 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
module barrel_shifter
(
input [N-1:0] data,
input [M-1:0] distance,
input clk, enable, shift_left,
output reg [N-1:0] sr_out
);

parameter M = 3;
parameter N = 2**M;

// Declare temporary registers
reg [2*N-1:0] tmp;

// Shift/rotate in the specified direction and
// by the specified amount
always @ (posedge clk)
begin
tmp = {data,data};

if (enable == 1'b1)
if (shift_left)
begin
tmp = tmp << distance;
sr_out <= tmp[2*N-1:N];
end
else
begin
tmp = tmp >> distance;
sr_out <= tmp[N-1:0];
end
end

endmodule
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
delacrxoix_xu
硬件设计 6,172 成员 11,288 内容