|
module ctrl_loadframe(
clk200, rst, init_active, dmd_1080p, loadframe, loadframe_ok,
blk_we, blk_md, blk_ad, blk_ok, row_we, row_md, row_ad, row_ok,
loadrow_start, dmd_rowloads, dmd_noop, loadrow_ok
);
input clk200;
input rst;
input init_active;
input loadframe;
output loadframe_ok;
output blk_we;
output [1:0] blk_md;
output [3:0] blk_ad;
input blk_ok;
start <= #1 0;
loadframe1 <= #1 0;
loadframe2 <= #1 0;
always@(posedge clk200 or posedge rst) begin
loadframe1 <= #1 loadframe;
loadframe2 <= #1 loadframe1;
if(loadframe2) begin
start <= #1 1;
end
else if(loadframe_ok) begin
start <= #1 0;
end
else begin
start <= #1 start;
end
end
assign #1 blk_we = blk_we_o;
assign #1 blk_md = blk_md_o;
assign #1 blk_ad = blk_ad_o;
仅从语法上解释:
(1)clk200 为200MHz,loadframe1 <= #1 loadframe; 这条语句延时1nm再赋值,延时1nm大于clk200时钟周期,
可是下一个时钟到来时延时还未结束,下一个时钟loadframe1 <= #1 loadframe;还能执行吗?为什么要对
loadframe加延时呢。
(2)loadframe为input类型,如果loadframe的值在module 内改变,那么是否可以将改变值传到module 外呢?
(3)请问start <= #1 0;,和always@和assign 是否为并行执行,如果在本时钟周期内没有执行完,下一时钟又到来会怎样呢?
非常感谢!
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|