verilog - 编写一个简单的函数来计算向量中的个数
问题描述
作为学习如何在 Verilog 中编写函数的任务,我正在尝试编写一个仅计算给定向量中的个数的函数:
module m ();
parameter n = 4;
function integer count_ones (input [n-1:0] a);
for (integer i = 0 ; i<n ; i=i+1)
begin
if (a[i] ==1'b1)begin
count_ones=count_ones+1;
end
end
endfunction
initial begin
reg [3:0] a = 4'b1;
integer result = count_ones (a);
$display("output is ", result);
end
endmodule
结果显示为x
。那么这段代码中的错误是什么?
解决方案
您声明count_ones
为 type integer
,这是一个 4 状态类型,其默认值为x
。此外,count_ones=count_ones+1;
保持count_ones
等于x
。
您应该在函数内部进行初始化count_ones
。
function integer count_ones (input [n-1:0] a);
count_ones = 0;
请记住,有一个内置的$countones
系统功能。请参阅 IEEE Std 1800-2017,第 20.9 节位向量系统功能。
推荐阅读
- reactjs - 导入和导出可能只出现在顶层 - reactjs
- angular - 我收到一个错误:http://localhost:10600/playground/ 的 Http 失败响应:404 Not Found at new ApolloError
- logging - 如何打开由 DigitalMicrograph 创建的 .dmp 文件?
- oracle - 侦听器显示带有域名的服务
- algorithm - 我无法访问此 pine 脚本警报,这是什么问题,第 11 行:输入“行尾没有行继续”时出现语法错误
- javascript - 更改 Material Ui 日期选择器的背景颜色
- javascript - 使用 javascript 在每次点击时重置从下拉菜单生成的图像
- antd - Ant Design - 水平菜单上的右箭头
- iptables - 限制转发流量中特定端口的 IP 连接
- c - MISRA 是否检查数组索引是否超出范围?