吴明

FPGA 何去何从(三)

1
阅读(2127)

继续一本正经的胡说八道

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_outvideo_out_int

.vs (vs),

.hs (hs),

.de (de),

.rdg_data (rgb_data)

);


rgb2ycb422rgb2ycb422_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_outvideo_out_inst

.inf (inf)

);


video_invideo_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的一个偏门的用法,下篇才是讲怎么带来设计思路的变化!

Baidu
map