gpt4 book ai didi

syntax - Verilog:案例结构中许多案例的更好语法

转载 作者:行者123 更新时间:2023-12-05 01:04:21 24 4
gpt4 key购买 nike

我在 Verilog 中有一个案例结构,大约有 95 个案例。

        case(address)
5'd0: header_buffer[7:0] <= writedata;
5'd1: header_buffer[15:8] <= writedata;
5'd2: header_buffer[23:16] <= writedata;
5'd3: header_buffer[31:24] <= writedata;

如您所见,有一个非常可预测的模式。有没有更好的方法来写这个,这样我就不必手动写出所有案例,这样我就可以将其缩放到任意大的尺寸,例如 100 或 200 个案例?似乎某种类型的 for 循环语法非常有用。

最佳答案

它可以通过位切片在一两行中完成,但是您需要检查您的合成器属性是否生成它。

header_buffer[8*address +: 8] <= writedata;

如果地址可能超出范围(例如地址==100,最大值为 95),那么您应该使用 if 条件:
if (address < MAX_ADDRESS)
header_buffer[8*address +: 8] <= writedata;

说明和示例可在 IEEE Std 1800-2012 中找到§ 11.5.1 矢量位选择和部分选择寻址。第一个 IEEE 出现是 IEEE 1364-2001 (Verilog) § 4.2.1 矢量位选择和部分选择寻址。您可能还想查看以前在 Indexing vectors and arrays with +: 上回答过的问题。

谨慎的话。尽管自 Verilog-2001 以来,位切片已成为标准的一部分,但并非所有工具都通过适当的优化完全实现了位切片。有时,即使两者功能相同,传统的完整 case 语句也会产生更好的结果。

关于syntax - Verilog:案例结构中许多案例的更好语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23398972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com