verilog - Verilog 中与 1023 个 10 位向量的异或相关的延迟
问题描述
我对 verilog 有点陌生,我有一个令我困惑的问题。我有许多常量参数,特别是其中近 1023 个 c0、c1、c2 ..... c1022,每个参数长度为 10 位。我还有一个向量 r[1022:0] ,长度为 1023 位。我的任务是计算 ci*r[i],其中 i 从 0 变化到 1022,最后对我得到的 1023 个 10 位向量进行异或运算。当我在模拟中执行此操作时,verilog 在时间 0 为分配生成输出陈述 。verilog 如何在时间 0 生成输出?这些 1023 xor 不会有延迟吗?另外,如果我需要简洁地做到这一点,有没有我可以使用的简短形式,或者我需要手动编写 c0 *r[0] ^ c1 *r[1] ......^ c[1022] *r[1022] 哪个是可合成的?
解决方案
Verilog 模拟器将执行您提供的任何合法语法——该工具对最终实现的样子一无所知。将时序约束提供给综合工具取决于您,它会告诉您它是否可以满足逻辑以满足约束(或者您可能必须运行另一个工具来查看它是否满足时序约束)。
既然你命名了你的参数c0, c1, c2, ...
,你也可以命名它们czero, cone, ctwo, ...
,这样你就没有快捷方式的选项了。
如果您的工具支持 SystemVerilog,您可以将参数写入数组,然后使用数组异或归约运算符
parameter [9:0] C[1023] = {10'h123, 10'h234, ...};
assign out = C.xor() with (item*r[item.index]);
如果您的综合工具不支持此 SystemVerilog 语法,您可以将参数值打包到单个向量中,并在 Verilog 中使用索引部件选择。
parameter [10220-1:0] C = {10'h123, 10'h234, ...};
function [9:0] xor_reduction (input [1022:0] r);
integer I;
begin
xor_reduction = 0;
for(I=0;I<1023;I=I+1)
xor_reduction = xor_refuction ^ (r[1022-I]*C[I-:10]);
end
endfunction
assign out = xor_reduction(r);
推荐阅读
- tensorflow - 当将 X 轴从步进更改为相对时,我在张量板标量图中看到了很大的差异(参见图片)。想知道为什么?
- c# - 确保数据保存的工作单元模式
- paypal - 发票首页仅接受通过 PayPal 电子邮件 ID 付款。如何?
- mongodb - 由 Bitnami 打包的 MongoDB® Sharded 设置身份验证并从 docker 外部连接
- java - 使用返回类型记录表的 Spring JPA 调用 Oracle 函数
- java - 在java中使用正则表达式从字符串中提取字符串值
- grafana - Grafana-cli admin reset-admin-password 访问被拒绝
- mysql - 删除触发器之前/之后
- python - 在 nbconvert 之后设置 Jupiter notebook toc 侧边栏的宽度
- google-cloud-dataflow - 用于包含文件名元数据的大量文件 (1M+) 的 Apache Beam/Dataflow 管道