zblw 发表于 2012-7-4 15:08:15

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 是否为并行执行,如果在本时钟周期内没有执行完,下一时钟又到来会怎样呢?


非常感谢!

zblw 发表于 2012-7-4 16:26:56

自己找了下资料,

(1)#开头的延时不能综合,没有用。
(2)好像语法不允许
(3)都并行

wye11083 发表于 2012-7-4 21:55:56

这个是仿真程序,上面看到的只是接线和一些仿真逻辑。

kebaojun305 发表于 2012-7-5 09:23:40

本帖最后由 kebaojun305 于 2012-7-5 09:25 编辑

同意 楼上的这个verilog只是仿真时用的(一般是测试激励程序)是不能综合的。


(2)loadframe为input类型,如果loadframe的值在module 内改变,那么是否可以将改变值传到module 外呢?
loadframe已经定义为input类型所以在这个module是不能被赋值的。
页: [1]
查看完整版本: verilog HDL编程新手,请教一段程序的语法含义,延时,并行...