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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Verilog:案例结构中许多案例的语法更好相关的知识,希望对你有一定的参考价值。

我在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;

如果地址超出范围(ex地址== 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以来,位切片已成为标准的一部分,但并非所有工具都通过适当的优化完全实现了位切片。有时候传统的完整案例陈述会产生更好的结果,即使两者在功能上是相同的。

以上是关于Verilog:案例结构中许多案例的语法更好的主要内容,如果未能解决你的问题,请参考以下文章

Verilog 中的案例陈述?

代码重构之道案例优化

FPGA教程案例41图像案例1——通过verilog读取图片

markdown 语法案例

FPGA教程案例45图像案例5——基于FPGA的图像均值滤波verilog实现,通过MATLAB进行辅助验证

FPGA教程案例40通信案例10——基于FPGA的简易OFDM系统verilog实现