小编dis*_*ted的帖子

"序列化"VHDL记录

假设我有以下类型定义,它依赖于常量来指示记录成员的向量长度:

type point_t is record
    x: std_logic_vector(X_WIDTH-1 downto 0);
    y: std_logic_vector(Y_WIDTH-1 downto 0); 
end record;
Run Code Online (Sandbox Code Playgroud)

我想将这些记录转换为std_logic_vectors,将它们放入FIFO中.目前我使用以下代码:

PROCEDURE encodepoint(signal pnt: in point_t;
                      signal d: out std_logic_vector(POINT_ENC_WIDTH-1 downto 0)) is
    variable top: integer := 0;
begin
    top := X_WIDTH-1;
    d(top downto 0) <= pnt.x;

    top := top + Y_WIDTH;
    d(top downto top-X_WIDTH+1) <= sl.y;

    d(d'left downto top+1) <= (others => '0');
end;
Run Code Online (Sandbox Code Playgroud)

此代码在许多方面都不是最理想的.例如,它要求我始终将POINT_ENC_WIDTH正确设置为足够大的值,以允许d保存整个序列化记录.它依靠程序员来做非常机械的工作.例如,对于记录的每个成员,例如x,在代码中X_WIDTH出现两次,一次x与下一个成员直接连接,一次与下一个成员连接,y.这很快就会变得乏味.如果我通过添加其他字段来更改记录的定义,我必须更新序列化和(非常相似)反序列化代码,我可能会忘记这一点.当我删除字段时,至少编译器会抱怨.

因此,这引出了我的问题:是否有简单,自动或至少准自动的方式将VHDL记录转换为std_logic_vectors而无需借助于手动编写的序列化/反序列化代码?我知道特定的编码并不重要,因为我在内部使用记录,并且明确指定了最终输出格式并将手动实现.

serialization record vhdl

3
推荐指数
1
解决办法
5507
查看次数

标签 统计

record ×1

serialization ×1

vhdl ×1