verilog HDL编程新手,请教一段程序的语法含义,延时,并行...
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 blk_md;
output 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 是否为并行执行,如果在本时钟周期内没有执行完,下一时钟又到来会怎样呢?
非常感谢!
自己找了下资料,
(1)#开头的延时不能综合,没有用。
(2)好像语法不允许
(3)都并行
这个是仿真程序,上面看到的只是接线和一些仿真逻辑。 本帖最后由 kebaojun305 于 2012-7-5 09:25 编辑
同意 楼上的这个verilog只是仿真时用的(一般是测试激励程序)是不能综合的。
(2)loadframe为input类型,如果loadframe的值在module 内改变,那么是否可以将改变值传到module 外呢?
loadframe已经定义为input类型所以在这个module是不能被赋值的。
页:
[1]