赞
踩
I2C的Verilog实现有几个需要注意的地方:
assign sda = (link_write)? sh8out_buf[7] : 1'bz;
always @(negedge CLK)
if(!RESET)
SCL <= 0;
else
SCL <= ~SCL;
用CLK的下降沿来触发SCL时钟,用CLK的上升沿来触发SDA,这样SDA与SCL就相差了半个 SCL 周期,这样就满足了I2C总线上的传输协议。task task_id;
[declaration]
procedural_statement
endtask
(1)在第一行“task”语句中不能列出端口名称;
(2)任务的输入、输出端口和双向端口数量不受限制,甚至可以没有输入、输出以及双向端口。
(3)在任务定义的描述语句中,可以使用出现不可综合操作符合语句(使用最为频繁的就是延迟控制语句) ,但这样会造成该任务不可综合。
(4)在任务中可以调用其他的任务或函数,也可以调用自身。
(5)在任务定义结构内不能出现 initial和 always过程块。
(6)在任务定义中可以出现“disable 中止语句” ,将中断正在执行的任务,但其是不可综合的。当任务被中断后,程序流程将返回到调用任务的地方继续向下执行。
如例所示:
task shift8_out;
begin
casex(sh8out_state)
sh8out_bit7: //将 sh8out_buf[7]给 sda
if(!SCL) //scl 为低电平时给 sda 赋值,这是 i2c 总线时序要求的
begin
link_sda <= YES;
link_write <= YES;
sh8out_state <= sh8out_bit6;
end
else
sh8out_state <= sh8out_bit7;
sh8out_bit6: //将 sh8out_buf[6]给 sda
if(!SCL)
begin
link_sda <= YES;
link_write <= YES;
sh8out_state <= sh8out_bit5;
sh8out_buf <= sh8out_buf<<1;
end
else
sh8out_state <= sh8out_bit6;
sh8out_bit5: //将 sh8out_buf[5]给 sda
if(!SCL)
begin
sh8out_state <= sh8out_bit4;
sh8out_buf <= sh8out_buf<<1;
end
else
sh8out_state <= sh8out_bit5;
sh8out_bit4: //将 sh8out_buf[4]给 sda
if(!SCL)
begin
sh8out_state <= sh8out_bit3;
sh8out_buf <= sh8out_buf<<1;
end
else
sh8out_state < = sh8out_bit4;
sh8out_bit3: //将 sh8out_buf[3]给 sda
if(!SCL)
begin
sh8out_state <= sh8out_bit2;
sh8out_buf <= sh8out_buf<<1;
end
else
sh8out_state <= sh8out_bit3;
sh8out_bit2: //将 sh8out_buf[2]给 sda
if(!SCL)
begin
sh8out_state <= sh8out_bit1;
sh8out_buf <= sh8out_buf<<1;
end
else
sh8out_state <= sh8out_bit2;
sh8out_bit1: //将 sh8out_buf[1]给 sda
if(!SCL)
begin
sh8out_state <= sh8out_bit0;
sh8out_buf <= sh8out_buf<<1;
end
else
sh8out_state <= sh8out_bit1;
sh8out_bit0: //将 sh8out_buf[0]给 sda
if(!SCL)
begin
sh8out_state <= sh8out_end;
sh8out_buf <= sh8out_buf<<1;
end
else
sh8out_state <= sh8out_bit0;
sh8out_end: //将 sda 上的数据保持一个 scl 周期,保持数据的完整性
if(!SCL) //到下一次 scl 为低电平时,正好为一个 scl 周期
begin
link_sda <= NO;
link_write <= NO;
FF <= 1;
end
else
sh8out_state <= sh8out_end;
endcase
end
endtask

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。