【FPGA & Verilog】新手向 奇数分频器

实验 12:奇数分频器

⼀ 实验⽬的

1. 掌握分频器电路的设计⽅法

2. 掌握Quartus II软件⽂本输⼊设计的流程

⼆ 实验内容

2.1 设计输⼊

1. 模块名称:FrequencyDivider

2. 输⼊输出:CLK、RSTn、CLK_15

2.2 引脚约束

1. 输⼊端 ⾃定义

2. 输出端 ⾃定义

2.3 设计要求

1. 输出时钟的周期是输⼊时钟的15倍(15分频器)

2.  50% 占空⽐两种分频

3. 使⽤RTL View分析电路的区别

2.4 电路仿真1. 使⽤ModelSim仿真

2. 功能仿真

三 实验报告

1. 设计代码、RTL视图

2. 仿真结果

3. 报告中附代码和仿真结果截图

四:实验报告

(1)7:15分频

即分频输出CLK15的一个周期中,高低电平时间之比为 7:8,据此可以在控制输出CLK15的高低电平

设计代码:

module FrequencyDivider(CLK,RSTn,CLK_15);
input CLK,RSTn;
output CLK_15;
reg [3:0]counter_p,counter_n;
reg CLK_p,CLK_n;
assign CLK_15 = CLK_p | CLK_n;

always@(posedge CLK or negedge RSTn)
if(! RSTn) begin
counter_p <= 0;
CLK_p <= 0;
end
else if(counter_p < 14)
        begin
  counter_p <= counter_p + 1;
  if(counter_p < 7)
CLK_p <= 1;
  else
CLK_p <= 0;
  end
else
counter_p <= 0;

always@(negedge CLK or negedge RSTn)
if(! RSTn) begin
counter_n <= 0;
CLK_n <= 0;
end
else if(counter_n < 14)
        begin
  counter_n <= counter_n + 1;
  if(counter_n < 7)
CLK_n <= 1;
  else
CLK_n <= 0;
end
else
counter_n <= 0;
endmodule

 

2.RTL view

 

3.创建VWF文件进行功能仿真:

 

4.引脚约束和检查分析:

 

5.使用专用Modelsim进行仿真:

 

两个文件:FrequencyDivider.v 和 FrequencyDivider_tb.v 前者是源文件copy添加到Modelsim项目中去的,后者是tesebench文件

 

测试文件testbench代码:

`timescale 1ns/1ns

module FrequencyDivider_tb1;

reg clk,rstn;

wire clk15;

  FrequencyDivider U1(.CLK(clk),

      .RSTn(rstn),

      .CLK_15(clk15));

always #10 clk=~clk;

initial begin

clk=0;

rstn=0;

#1 rstn=1;

end

endmodule

仿真结果:

(2)50%分频 【是由两个分别由上升沿pos和下降沿neg触发的分频信号合成(或 运算)】

 

设计代码:

module FrequencyDivider(CLK,RSTn,CLK_15);

input CLK,RSTn;

output CLK_15;

reg [3:0]counter_p,counter_n;

reg CLK_p,CLK_n;

assign CLK_15 = CLK_p | CLK_n;

always@(posedge CLK or negedge RSTn)

  if(! RSTn) begin

  counter_p <= 0;

  CLK_p <= 0;

  end

  else if(counter_p < 14)

        begin

    counter_p <= counter_p + 1;

    if(counter_p < 7)

    CLK_p <= 1;

    else

    CLK_p <= 0;

    end

  else

  counter_p <= 0;

always@(negedge CLK or negedge RSTn)

  if(! RSTn) begin

  counter_n <= 0;

  CLK_n <= 0;

  end

  else if(counter_n < 14)

        begin

    counter_n <= counter_n + 1;

    if(counter_n < 7)

    CLK_n <= 1;

    else

    CLK_n <= 0;

  end

  else

  counter_n <= 0;

endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值