打印

贡献一个测试示波器捕获率的小程序

[复制链接]
1303|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
XLDZZ|  楼主 | 2013-3-8 21:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 XLDZZ 于 2013-3-8 21:37 编辑

今天用这个程序去测试了下 RIGOL DS2102的示波器

觉得很实用 拿出来和大家分享
`define DUTY   15'd20000  //周期加入数
`define TIME1  15'd20  //窄脉冲
`define TIME2  15'd200 //宽脉冲 标准信号
//作者 XLDZZ
module MSO_TEST(
            SYSCLK,
            RST_B,
            
            OUT2,

            OUT1
           );
//==============================================================================================
//                                输入和输出口定义
//==============================================================================================
input   SYSCLK;
input   RST_B;
output  OUT1;
output  OUT2;

//==============================================================================================
//                                输入输出口类型定义
//==============================================================================================
wire    SYSCLK;
wire    RST_B;
reg     OUT1;
reg     OUT2;
reg     OUT1_N;
//==============================================================================================
//                               logic 描述
//==============================================================================================
reg[15:0]P_CNT;
reg[15:0]P_CNT_N;
reg[15:0]T_CNT;
reg[15:0]T_CNT_N;
reg[15:0]DATA;
reg[15:0]P_DATA;
reg[15:0] CNT;
reg[15:0]CNT_N;

always@(posedge SYSCLK or negedge RST_B)
begin
  if(!RST_B)
   P_DATA<=0;
  else
   P_DATA<=`DUTY;
end

always@(posedge SYSCLK or negedge RST_B)  //脉冲发生器
begin
  if(!RST_B)
   T_CNT<=0;
  else
   T_CNT<=T_CNT_N;
end

always@(*)
begin
  if(T_CNT==DATA)
   begin
    T_CNT_N<=0;
   end
  else
   begin
    T_CNT_N<=T_CNT+1'b1;
   end
end

always@(posedge SYSCLK or negedge RST_B)
begin
  if(!RST_B)
   OUT1<=0;
  else
   OUT1<=OUT1_N;
end

always@(*)
begin
  if(T_CNT==DATA)
   OUT1_N<=~OUT1;
  else
   OUT1_N<=OUT1;
end
//==============================================================
always@(posedge SYSCLK or negedge RST_B) //次数发生器
begin
  if(!RST_B)
   P_CNT<=0;
  else
   P_CNT<=P_CNT_N;
end

always@(*)
begin
  if(T_CNT==DATA)
   P_CNT_N<=P_CNT+1'b1;
  else if(P_CNT==P_DATA)
   P_CNT_N<=0;
  else
   P_CNT_N<=P_CNT;
end

always@(posedge SYSCLK)
begin
  if(P_CNT==(P_DATA-1))
   DATA<=`TIME1;
  else
   DATA<=`TIME2;
end

always@(posedge SYSCLK or negedge RST_B)
begin
  if(!RST_B)
   CNT<=0;
  else
   CNT<=CNT_N;
end

always@(*)
begin
  if(CNT==`TIME2)
   CNT_N<=0;
  else
   CNT_N<=CNT+1'b1;
end

always@(posedge SYSCLK)
begin
  if(!RST_B)
   OUT2<=0;
  else if(CNT==`TIME2)
   OUT2<=~OUT2;
  else
   OUT2<=OUT2;
end



endmodule

相关帖子

沙发
GoldSunMonkey| | 2013-3-8 21:32 | 只看该作者
感谢分享啊

使用特权

评论回复
板凳
XLDZZ|  楼主 | 2013-3-8 21:39 | 只看该作者
//以下是TB文件

module mso_test_tb;
  
  
  reg SYSCLK;
  reg RST_B;
  wire OUT1;
  
  mso_test mso_test_i(
            .SYSCLK(SYSCLK),
                        .RST_B(RST_B),
                        .OUT1(OUT1)
                         );
                         
always #10 SYSCLK=~SYSCLK;

initial
begin
  
  #0 RST_B=0;
     SYSCLK=0;
  #100 RST_B=1'b1;
end

endmodule

使用特权

评论回复
地板
GoldSunMonkey| | 2013-3-9 21:59 | 只看该作者
;P中间被我打断了

使用特权

评论回复
5
星星之火红| | 2013-3-9 22:16 | 只看该作者
猴哥太坏了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

182

帖子

0

粉丝