@kemberly 我们成功实现了,谢谢
Posts
-
RE: H265 ENCODER RTL V2.0仿真教程
@Fudh 我们用的zcu102,zynq ultrascale+,谢谢
-
RE: H265 ENCODER RTL V2.0仿真教程
@Fudh 暂不开源,抱歉我不能提供。如果只是确认rec.yuv是否正确,直接和.hevc解码得到的YUV对比即可。谢谢
-
RE: H265 ENCODER RTL V2.0仿真教程
@yfor debug之后发现是熵编码里面的dump_buf设置不够大,一般情况下是足够的,dump_buf是用来导出测试TV的。但是特殊情况下,输出码流比较大,超出dump_buf的大小,无法正常导出文件,所以会出现这个问题。PS:与编码过程无关
-
RE: H265 ENCODER RTL V2.0仿真教程
- 那些测试序列是HEVC官方序列,搜HEVC测试序列即可
- rc相关文件不影响正常仿真
- ime_cfg仅配置运动搜索范围、形状等参数,一般情况下可用同一套参数
-
RE: H265 ENCODER RTL V2.0仿真教程
@wr115946873 我们一直都是在Linux下仿真的(验证正确,如下图),没有在Windows下仿过,建议更换仿真平台或者debug enc_ctrl模块查看某一模块done_i是否未收回,并进一步debug相关模块

Linux modelsim 10c

-
RE: H265 ENCODER RTL V2.0仿真教程
@wr115946873 1. 并不是立刻会有输出,mb_x_first表示CTU开始编码,不是CTU编码完成,所以要等几个CTU之后才会有码流输出; 2. 对不起,我这边也没有ratecontrol相关文档
-
H.265/HEVC Encoder IP Core V2.0 综合结果
-
DC with TSMC65nm under 400MHz

-
Xilinx FPGA

-
-
H265 ENCODER RTL V2.0仿真教程
-
Download the H265 Video Encoder RTL IP Core V2.0
-
解压后得到四个文件夹, 其中“
sw”是产生测试向量,“sim”是仿真文件,“rtl”是IP Core的所有代码,“lib”是memory行为级模型

-
进入“sw”文件夹中,修改“
f265_encode.cfg”中的参数配置
InputFile:输入待编码的YUV文件
WidthVideo:视频宽
HeightVideo:视频高
GOPLength: GOP 长度
EncodeFrames:编码帧数
EncodeQP:QP

-
执行“
.\f265.exe -c .\f265_encode.cfg”,Linux下用“f265”
运行完成以及导出文件如下图所示

其中,
“I_SLICE”表示帧内预测编码结果;“P_SLICE”表示P帧编码结果
“bs.hevc”是编码完成的码流文件;“fp_psnr.csv”输出编码结果PSNR,bitrate等
“rec.yuv”重建完成的YUV文件;”s_bit_stream”是CABAC输出的熵编码完成的文件,用于硬件测试。 -
将软件导出的文件放到 “
/sim/top_testbench/tv”中,并将原始YUV也放入tv文件夹中,如下图所示,”ime_cfg.dat”是配置IME参数,不用更改
-
修改“tb_enc_top.v”中的参数,确认与软件导出数据时所用参数相同
'define TEST_I 1 // 测试I帧
'define TEST_P 0 // 测试P帧
'define FRAME_WIDTH 416
'define FRAME_HEIGHT 240
'define INITIAL_QP 20
'define GOP_LENGTH 50
'define FRAME_TOTAL 2
'define FILE_CUR_YUV "./tv/BlowingBubbles.yuv" // 指定原始YUV文件路径 -
利用Makefile运行仿真,“
make vcs” or “make ncsim” or “make vsim”,可能由于软件版本不同,会出现仿真错误,建议更换仿真软件或者使用新版本的仿真软件
仿真正确完成结果如图所示

-
下面两图是软件和硬件设置的QP不同输出的错误结果,错误后会停止编码,供参考

-