|
发表于 2016-2-28 18:57:30
|
显示全部楼层
本帖最后由 3DA502 于 2016-2-29 21:54 编辑
周末好无聊,这个是可以把每一个脉冲宽度都输出的方案,看看大家能不能给出更好的
- module test(clk,trg,outcnt);
- input clk;/* 这是400MHz时钟*/
- input trg;/* 这是GPS的1pps信号*/
- output[31:0] outcnt;/* 这是计数值 定义输出*/
- reg [31:0] outcnt;/* 这是计数值缓存*/
- reg rValve;/* 这是AB计数器切换*/
- reg [31:0] cnt1;/* 这是A计数器*/
- reg [31:0] cnt0;/* 这是B计数器*/
-
- /**************************/
- always@(posedge trg)/* 每个1pps信号上升沿,触发AB计数器切换*/
- begin
- rValve <= ~rValve;
- end
- /**************************/
- always @(posedge clk)
- begin
- if(rValve == 1'b01 )
- begin
- cnt1 <= cnt1 + 1; /* 当切换控制是1时,A计数器对400MHz计数*/
- end
- else
- begin
- cnt0 <= cnt0 + 1; ;/* 当切换控制是0时,B计数器对400MHz计数*/
- end
- end
- /**************************/
- always @(negeage trg)/* 当1pps信号的下降沿时候,把空闲的AB计数值进行转移,并置零,为下个上升沿切换做准备*/
- begin
- if(rValve == 1'b00 )
- begin
- outcnt <= cnt1 ; /* 非阻塞赋值*/
- cnt1 <= 32'b0 ; /* 非阻塞赋值*/
- end
- else
- begin
- outcnt <= cnt0 ; /* 非阻塞赋值*/
- cnt0 <= 32'b0 ; /* 非阻塞赋值*/
- end
- end
- /**************************/
- endmodule
复制代码 |
|