这段verilog程序代码什么意思,是一段读写操作(节选部分),望大家给指点一下。

task write_to_eeprm;
begin
shift_in(memory_buf);
address={ctrl_byte[3:1],addr_byte};
memory[address]=memory_buf;
$display("eeprm-------memory[%0h]=%0h",address,memory[address]);
state=2'b00;
end
endtask

task read_from_eeprm;
begin
shift_in(ctrl_byte);
if(ctrl_byte==r7 || ctrl_byte==r6 ||ctrl_byte==r5
|| ctrl_byte==r4 ||ctrl_byte==r3 ||ctrl_byte==r2
||ctrl_byte==r1 || ctrl_byte==r0 )
begin
address={ctrl_byte[3:1],addr_byte};
sda_buf=memory[address];
shift_out;
state=2'b00;
end
end
endtask

task shift_in;
output[7:0] shift;
begin

@(posedge scl) shift[7]=sda;
@(posedge scl) shift[6]=sda;
@(posedge scl) shift[5]=sda;
@(posedge scl) shift[4]=sda;
@(posedge scl) shift[3]=sda;
@(posedge scl) shift[2]=sda;
@(posedge scl) shift[1]=sda;
@(posedge scl) shift[0]=sda;
@(negedge scl)
begin
# `timeslice;
out_flag=1;
sda_buf=0;
end
@(negedge scl)
# `timeslice out_flag=0;
end
endtask

task shift_out;
begin
out_flag=1;
for(i=6;i<=0;i=i-1)
begin
@(negedge scl);
# `timeslice;
sda_buf=sda_buf<<1;
end
@(negedge scl) #`timeslice sda_buf[7]=1;
@(negedge scl) # `timeslice out_flag=0;
end
endtask
能说的具体点吗?memory_buf是做什么用的?

这是一段读写你的可复写只读存储器/存储芯片的通用程序,
write_to_eeprm 写入子程序,
shift_in 是写入时SDA总线控制, 并把写入并行数据转为串行.它是支持write_to_eeprm写入子程序的

read_from_eeprm 读出子程序
shift_out 是读出时SDA总线控制, 并把读出串行数据转为并行.它是支持read_from_eeprm 读出子程序的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-17
读写E方PROM的程序。有并串转换,写入和读出程序
相似回答