ADF5355的VERILOG接口代码

66 篇文章 22 订阅
58 篇文章 27 订阅

   
参照这个图就可以写出VERILOG代码:

 

这里用的简单直接的列举所有时序边缘的写法,非常简单,根本不用动脑。代码看上去是多了点但是执行效率没有影响。

module tb ;
reg clk  = 0 , rst =  1 ;
always#5 clk <= ~clk;
reg write= 0 ;
reg [31:0] din =0;
wire busy ;



task wr_adf5355 ;
input [31:0] v ;
begin 
din = v;
@(posedge clk) ;
while(busy)@(posedge clk) ;
write=1;@(posedge clk) ;
write=0;@(posedge clk) ;
end 
endtask

initial begin 

$dumpfile ("aaa.vcd");
$dumpvars (0 ); 

#100 rst = 0;
wr_adf5355(  32'h55_55_55_55 );
wr_adf5355(  32'h0);
#1000
$finish ;


end 





adf5355_if  adf5355_if (
.clk(clk) ,
.rst(rst) ,
.din(din ) ,
.busy(busy) ,
.write(write ) ,
.adf5355_clk(adf5355_clk),
.adf5355_dat(adf5355_dat),
.adf5355_le(adf5355_le)
);

endmodule 

/*

adf5355_if  adf5355_if (
.clk(clk) ,
.rst(rst) ,
.din(din ) ,
.busy(busy) ,
.write(write ) ,
.adf5355_clk(adf5355_clk),
.adf5355_dat(adf5355_dat),
.adf5355_le(adf5355_le)
);

*/

module adf5355_if (
input clk ,rst ,
input [31:0] din ,
output reg busy ,
input write ,
output reg  adf5355_clk,adf5355_dat,adf5355_le
);
reg [7:0]  st ;
reg [31:0] r32 ;always @ (posedge clk ) if (write)r32<=din ;


always @ (posedge clk)  busy <= (st!=0) ;

reg[7:0] str;always @ (posedge clk) str<=st;

wire st_move = str!=st ;
reg [15:0]  d ;
always @ (posedge clk) if (st_move) d<=0; else d<=d+1;


always @ (posedge clk) if (rst) st<=0; else case (st)
0:if (write)st<=10;
10:    begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[31]} ;     if (d==2)  st<=100; end

100:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[31]} ;     if (d==2)  st<=st+1; end
101:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[30]} ;     if (d==2)  st<=st+1; end


102:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[30]} ;     if (d==2)  st<=st+1; end
103:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[29]} ;     if (d==2)  st<=st+1; end


104:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[29]} ;     if (d==2)  st<=st+1; end
105:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[28]} ;     if (d==2)  st<=st+1; end


106:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[28]} ;     if (d==2)  st<=st+1; end
107:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[27]} ;     if (d==2)  st<=st+1; end


108:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[27]} ;     if (d==2)  st<=st+1; end
109:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[26]} ;     if (d==2)  st<=st+1; end

110:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[26]} ;     if (d==2)  st<=st+1; end
111:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[25]} ;     if (d==2)  st<=st+1; end

112:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[25]} ;     if (d==2)  st<=st+1; end
113:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[24]} ;     if (d==2)  st<=st+1; end

114:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[24]} ;     if (d==2)  st<=st+1; end
115:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[23]} ;     if (d==2)  st<=st+1; end

116:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[23]} ;     if (d==2)  st<=st+1; end
117:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[22]} ;     if (d==2)  st<=st+1; end

118:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[22]} ;     if (d==2)  st<=st+1; end
119:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[21]} ;     if (d==2)  st<=st+1; end

120:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[21]} ;     if (d==2)  st<=st+1; end
121:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[20]} ;     if (d==2)  st<=st+1; end

122:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[20]} ;     if (d==2)  st<=st+1; end
123:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[19]} ;     if (d==2)  st<=st+1; end

124:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[19]} ;     if (d==2)  st<=st+1; end
125:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[18]} ;     if (d==2)  st<=st+1; end

126:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[18]} ;     if (d==2)  st<=st+1; end
127:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[17]} ;     if (d==2)  st<=st+1; end

128:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[17]} ;     if (d==2)  st<=st+1; end
129:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[16]} ;     if (d==2)  st<=st+1; end

130:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[16]} ;     if (d==2)  st<=st+1; end
131:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[15]} ;     if (d==2)  st<=st+1; end

132:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[15]} ;     if (d==2)  st<=st+1; end
133:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[14]} ;     if (d==2)  st<=st+1; end

134:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[14]} ;     if (d==2)  st<=st+1; end
135:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[13]} ;     if (d==2)  st<=st+1; end

136:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[13]} ;     if (d==2)  st<=st+1; end
137:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[12]} ;     if (d==2)  st<=st+1; end

138:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[12]} ;     if (d==2)  st<=st+1; end
139:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[11]} ;     if (d==2)  st<=st+1; end

140:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[11]} ;     if (d==2)  st<=st+1; end
141:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[10]} ;     if (d==2)  st<=st+1; end

142:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[10]} ;     if (d==2)  st<=st+1; end
143:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[9]} ;     if (d==2)  st<=st+1; end

144:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[9]} ;     if (d==2)  st<=st+1; end
145:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[8]} ;     if (d==2)  st<=st+1; end

146:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[8]} ;     if (d==2)  st<=st+1; end
147:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[7]} ;     if (d==2)  st<=st+1; end

148:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[7]} ;     if (d==2)  st<=st+1; end
149:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[6]} ;     if (d==2)  st<=st+1; end

150:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[6]} ;     if (d==2)  st<=st+1; end
151:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[5]} ;     if (d==2)  st<=st+1; end

152:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[5]} ;     if (d==2)  st<=st+1; end
153:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[4]} ;     if (d==2)  st<=st+1; end

154:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[4]} ;     if (d==2)  st<=st+1; end
155:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[3]} ;     if (d==2)  st<=st+1; end

156:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[3]} ;     if (d==2)  st<=st+1; end
157:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[2]} ;     if (d==2)  st<=st+1; end

158:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[2]} ;     if (d==2)  st<=st+1; end
159:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[1]} ;     if (d==2)  st<=st+1; end

160:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[1]} ;     if (d==2)  st<=st+1; end
161:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[0]} ;     if (d==2)  st<=st+1; end

162:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b01,r32[0]} ;     if (d==2)  st<=st+1; end
 
163:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[0]} ;     if (d==2)  st<=st+1; end
164:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b10,r32[0]} ;     if (d==2)  st<=st+1; end
165:   begin { adf5355_le,adf5355_clk,adf5355_dat} <={2'b00,r32[0]} ;     if (d==2)  st<=st+1; end

166: st <=200;
200: st<=0;

default st<=0; endcase 

endmodule 




-----------

 

上述仿真 图中所见非常完美的时序。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值