【精品博文】吴明系列博文 FPGA 何去何从(三)

继续一本正经的胡说八道

FPGA的下轮爆发很可能离不开systemverilog,至少前期的点火起步阶段有sv的主要参与。

为什么是sv?,sv有什么特别之处吗?

sv验证方面的东西我就不说了,一是我对验证不熟悉,二来sv已经在验证界证明自己的地位。我想说的是sv 设计,RTL,可综合设计。sv其实也并没有太特别之处(相对于Lisp,Ruby,R这些),准确的说sv不过是verilog的超集。sv大部分(不是全部)设计都可以用verilog来实现。

我是在差不多半年前强制自己全部用sv做设计的,现在回过头来看,sv带来的改变不在于编程语法上,而是在于设计思维上。这个思路的转变其实也只是因为interface功能的引入。举个例子:

视频的常用信号是 vs,hs,de,rgb_data 对于verilog的module port 可能是这么写的

module video_out (

output               vs,

output               hs,

output               de,

output[23:0]      rdg_data

);

module video_in (

input               vs,

input               hs,

input               de,

input[23:0]      rdg_data

);

systemverilog 可以这么写

此处略去interface定义,interface 可参考IEEE

module video_out (

video_inf.master  inf

);

module video_in (

video_inf.slaver     inf

);

看似没什么区别,呵呵,往下看,视频转格式是很常见的RGB-> YCbCr , 444->422 这些,sv完全可以把格式转换封装到interface里面,port根本不需要动。如果有一路RGB视频模块输出到一个Ycbcr422的模块,verilog就必须要加入一个转换module。sv就根本不需要动,因为已经把转换事先封装到了interface,

video_out video_out_int(

.vs                (vs),

.hs                (hs),

.de                (de),

.rdg_data     (rgb_data)

);

rgb2ycb422 rgb2ycb422_inst(

.vs                (vs),

.hs                (hs),

.de                (de),

.rdg_data     (rgb_data) ,

.ovs              (y_vs),

.ohs              (y_hs),

.ode              (y_de),

.ydata           (ydata)

);

video_in video_in_int(

.vs                (y_vs),

.hs                (y_hs),

.de                (y_de),

.ydata           (ydata)

);

vs 是完全不需要改变的

video_out video_out_inst(

.inf     (inf)

);

video_in video_in_inst(

.inf    (inf)

);

只需要在video_out模块对RGB信号和video_in模块内直接对YCbCr信号进行引用就行

assign  inf.vs  = vs;

assign  inf.hs  = hs;

assign  inf.de  = de;

assign  inf.rgbdata = rgbdata;

assign  y_vs = inf.y_vs

assign  y_hs = inf.h_hs

assign  y_de = inf.y_de

assign  ydata= inf.ydata

很想高级语言的面向对象的封装功能,RGB里面其实已经包含了完整的Ycbcr信息,直接把信号封装到一块是十分自然的。这篇只是讲interface的一个偏门的用法,下篇才是讲怎么带来设计思路的变化!

(0)

相关推荐