因工作需要,写了一个模拟I2S Master总线协议激励的test bench。左右声道的数据分别为16-bit,采样率为8kHz,因为需要重复发送,所以发送部分写了一个task,仿真中重复调用。
event bclk_negedge; // 定义一个event,叫“bclk_negedge”
always @(negedge i2s_bclk) begin
-> bclk_negedge; // 就是i2s_bclk的下降沿
end
task send_i2s_data(
input i2s_bclk, // bit clock
input [15:0] left_data, // left channel voice data
input [15:0] right_data, // right channel voice data
output ws, // word select, namely sampling rate
output sdo // serial data output
);
integer i; // counter
for (i=0;i<64;i=i+1) begin
if (i==0) ws = 1'b0; // cycle #0,
else if (i<=15) sdo = left_data[16-i]; // cycle #1 to #15
else if (i<=31) sdo = 1'b0; // cycle #16 to #31
else if (i==32) ws = 1'b1; // cycle #32
else if (i<=47) sdo = right_data[48-i]; // cycle #33 to #47
else sdo = 1'b0; // cycle #48 to #63
@(bclk_negedge);
模拟I2S Master总线协议激励的test bench

最低0.47元/天 解锁文章
1433

被折叠的 条评论
为什么被折叠?



