uvm验证8b10b
时间: 2023-11-27 17:05:15 浏览: 81
在UVM验证中,8b10b编码通常是在driver中完成的。驱动程序将8位数据转换为10位数据,并将其驱动到接口上。这种转换可以使用专门的算法来完成。在驱动程序中,可以使用类似于以下代码的任务来完成这种转换:
task my_driver::drive_one_pkt(my_transaction tr);
byte unsigned data_q[];
bit[9:0] data10b_q[];
int data_size;
data_size = tr.pack_bytes(data_q) / 8;
data10b_q = new[data_size];
for(int i = 0; i < data_size; i++)
data10b_q[i] = encode_8b10b(data_q[i]);
for ( int i = 0; i < data_size; i++ )
begin
@(posedge vif.p_clk);
for(int j = 0; j < 10; j++)
begin
@(posedge vif.s_clk);
vif.sdata <= data10b_q[i][j];
end
end
endtask
在这个任务中,驱动程序首先将事务中的数据打包成字节数组,然后计算出需要转换的数据大小。接下来,驱动程序使用encode_8b10b函数将每个字节转换为10位数据,并将结果存储在data10b_q数组中。最后,驱动程序使用for循环将转换后的数据驱动到接口上。
需要注意的是,在波形文件中,8b10b编码的工作通常是在driver中完成的,因此波形文件中可能不会包含data8b的信息。这可能会增加调试的难度。
阅读全文