【问题标题】:Efficient C code for Hardware realization in VerilogVerilog中用于硬件实现的高效C代码
【发布时间】:2008-11-24 20:43:26
【问题描述】:

我有一个用于图像编解码器的纯 C 代码。我的目标是开发一个高效的 C 模型,该模型将使用 Verilog 或一些此类硬件描述语言在硬件中采用和实现。我想知道的是:

1.) 需要对现有 C 代码结构进行哪些修改以提高硬件效率

2.) 是否需要修改数据结构。是否有任何与数组/缓冲区相关的约束(就像它们应该使用存储类寄存器声明一样。

3.) 我听说硬件模型不应该有 if 条件或尽可能少。那是关于什么的?

(考虑使用一些 FPGA 的通用硬件实现,Verilog 没有关于总线、时钟等的详细信息。)

-AD

【问题讨论】:

    标签: model hardware


    【解决方案1】:
    1. 这取决于您希望算法的硬件实现采用何种串行或并行方式。

    在always 块中,“

    1. 在 RTL 友好的 Verilog 中,您可以使用组合逻辑(逻辑方程的连续分配)和内存分配(寄存器和锁存器)来保持一段时间内的状态。您编码为 RTL 的数据结构可能会在逻辑综合期间推断出寄存器和锁存器。在 Verilog 中正确编码时,您的数据结构可能会工作,但在微处理器上执行有意义的方法可能不是在硬件中构建它的最佳方式。这又取决于。

    2. “if”可用于组合逻辑和内存逻辑(保持状态) 当写成三元运算符时,“if”(Verilog 的语法与 C 相同)合成为多路复用器(mux)。 “if”也可用于寄存器的逻辑描述中,以查看在始终阻止事件列表触发后复位引脚是否被置位(这只是一个示例)。 小心“If”:当打算使用 always 块创建组合逻辑时(事件列表没有 posedge clk 或 negedge clk、posedge 复位、negedge 复位等),并将组合逻辑变量赋值为一个“if”语句,然后忘记“else”语句,在综合期间将推断出一个锁存器。 “if”语句没有匹配的“else”语句意味着不做任何事情(保留值)。

    “reg”类型用于描述组合逻辑和内存逻辑;合成什么逻辑取决于总是阻塞事件列表和完整案例的存在。 C 代码通常转换为 always 块中使用的样式。

    “wire”类型用于连续赋值(组合逻辑)。

    ImpulseC 是一个软件到硬件的编译器,看起来很有趣。 HDL CoderMATLAB/Simulink 的配套产品,可自动生成您的硬件描述。

    即使您使用这些软件工具为您创建硬件描述,您仍然想了解它们生成的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多