FPGA 电路开发入门实验

FPGA 电路开发入门实验

0章:基础知识

如图1,本实验使用实验板为altera DE0,板子型号为Cyclone Ⅲ, EP3C16F484C6,编译软件为QuartusⅡ9.0。

FPGA 电路开发入门实验_第1张图片

图 1 Quartus实验板设置

0.1 常用管脚

实验板中常用管脚有50MHz时钟、拨码开关、按钮、LED和八段数码管等。

表格 1 时钟、拨码开关、按钮、LED管脚分布

功能

管脚

板上位置

50MHz时钟

G21

B12

拨码开关

J6

sw0

H5

sw1

H6

sw2

G4

sw3

G5

sw4

J7

sw5

H7

sw6

E3

sw7

E4

sw8

D2

sw9

按钮

H2

button0

G3

button1

F1

button2

LED

J1

LEDG0

J2

LEDG1

J3

LEDG2

H1

LEDG3

F2

LEDG4

E1

LEDG5

C1

LEDG6

C2

LEDG7

B2

LEDG8

B1

LEDG9

 

FPGA 电路开发入门实验_第2张图片

图 2 数码管管脚

0.2 signaltap介绍

SignalTap是由Altera公司开发的一个在线、片内信号分析的工具,为设计开发者验证所用。

用到signaltap的情况是当代码经过仿真没有问题,但加载到FPGA电路板后,发现功能不正确时,可以用signalTap工具进行分析,它的作用就类似于一个数字逻辑分析仪。利用signaltap基本上可以代替数字逻辑分析仪了,它是quartus里最常用的工具,必须熟练使用工具。

0.2.1 触发的概念

以模拟示波器为例,说明触发的概念。

(1)示波器的同步

要明白触发的概念,首先要了解示波器同步的概念。那么什么是示波器的同步呢?我们这里所说的示波器同步是指示波器的扫描信号与被观测的信号同步,也就是说它们的频率之间存在着整数倍的关系。

先了解一下示波器的工作原理。我们知道,示波器是通过在XY偏转板上加上控制电压,控制由电子枪射出电子束的偏转从而在屏幕上描绘出轨迹的,一般在X偏转板加的是正向锯齿波信号,线性上升的电压控制电子束从左到右移动,形成水平扫描。因为上升的电压与时间成线性关系,扫描得到的轨迹就可以模拟时间轴。如果同时在Y偏转板加上与被测信号成比例的电压,使电子束在水平移动的同时也在垂直方向移动,这样电子束就描绘出了被测信号与时间的关系,也就是信号的波形。这是示波器显示波形的基本原理。

Y是一周期性信号,X是扫描信号,显然它们是不同步的。显然它们在屏幕上的位置都不同,而且先后出现,所以看到的是它们的混合,得不到一个稳定的波形。这就是示波器的扫描与信号不同步的结果。

如果设法将X信号变成使每一次扫描开始时刻都对应于Y信号一个周期的同一点,使得每一次扫描对应的Y信号都相同,也就是让示波器的扫描信号与被测信号同步。当将这样的信号同时分别加到示波器的XY偏转系统时,由于每一个扫描周期XY的信号都相同,电子束受到同样的偏转控制,因而每一次扫描的电子束都打在屏幕上的同样的轨迹上。这是能看到的唯一波形,因为每一个扫描周期电子束都打在这个波形的轨迹上,而不是其他位置,因而这个波形是稳定的。这就是示波器扫描与信号同步的结果。

综上所述,如果要在示波器的屏幕上观察到稳定的波形,必要的条件是示波器的扫描信号要与被观察的信号保持同步关系。

那么,怎样才能使示波器的扫描信号与被观测信号保持同步关系呢?

(2)触发的作用

为了使扫描信号与被测信号同步,可以设定一些条件,将被测信号不断地与这些条件相比较,只有当被测信号满足这些条件时才启动扫描,从而使得扫描的频率与被测信号相同或存在整数倍的关系,也就是同步。这种技术我们就称为触发,而这些条件我们称其为触发条件

用作触发条件的形式很多,最常用最基本的就是边沿触发,即将被测信号的变化(即信号上升或下降的边沿)与某一电平相比较,当信号的变化以某种选定的方式达到这一电平时,产生一个触发信号,启动一次扫描。可以将触发电平选在0V,当被测信号从低到高跨越这个电平时,就产生一次扫描,这样就得到了与被测信号同步的扫描信号。其他的触发条件有脉宽触发斜率触发状态触发等等,这些触发条件通常会在比较高档的示波器中出现。

0.2.2 SignalTapII原理

在使用signalTap前,先理解一下SignalTap的原理,这样就助于理解每个参数。

想观察一组信号,称之为被测信号(可以是多个),同时指定一个采样时钟。

想看这个被测信号,在其下降沿前后几个时钟内,被测信号的值是多少。那么下降沿就是触发条件。

当满足触发条件时,signaltap会将触发条件前后,时钟上升沿时的所有信号值保存到一个RAM当中。

可以指定触发条件前后采多少个样点。如果RAM比较大,那么可以保存的数据就比较多。如果RAM比较小,那么保存的数据自然少。(因此RAM大小决定了观察数据的多少)。

SignalTap将数据保存到RAM后,将读出RAM中的数据,然后逐个在显示器中显示出来(因此SignalTap看到的都是理想的,没有毛刺的信号)。

0.2.3 打开SignalTapII

打开Quartus后,在菜单栏中,选择“Tools”->”SignalTal II Logic Analyzer”,就可以打开SignalTap工具。

0.2.4 界面介绍

 

FPGA 电路开发入门实验_第3张图片

图 3 signaltap界面介绍

 

上面是SignalTap的界面,我们按照使用顺序简述地介绍每个部分功能。

红色标号1:下载线选择,点击setup选择硬件的USB接口

红色标号2:硬件检测,扫描有没有FPGA硬件。

红色标号3:选择工程配置文件。可以将综合后的sof文件加载进来

红色标号4:正式加载sof工程文件

红色标号5:设置采样时钟

红色标号6:设置RAM的大小

红色标号7:选择要观察的信号,并且设置触发条件

红色标号8:开始运行,等待触发条件满足后显示波形

红色标号9:这里可以观察FPGA资源使用情况。如果资源多于FPGA本身的资源,综合时会报错。

0.2.5 SignalTapII使用步骤

a 选择下载线、fpga芯片型号、工程配置文件

b 设置采样时钟、采样深度

这里我们选择clk50M作为采样时钟,注意采样时钟不一定是工程里的时钟,内部任何信号都可以是采样时钟。

这里我们将采样深度设置为128个。也就是我们总共能看到128采样点的数据。

c 选择采样信号

在setup窗口中,双击空白地方,弹出Node Finder界面

FPGA 电路开发入门实验_第4张图片

图 4 Node Finder界面

Filter是选择哪个阶段的信号,例如是综合前、综合后等,因为综合时会优化,有些信号可能就找不到了。我们一般选择pre-synthesis或Design Entry(all name)。

在Node Founder选择我们要观察的信号,添加到右边框即可。

d 设置触发条件

选择好信号后,设置触发条件。

在trigger Conditions一列中右击,将有6个选择。

don’t care:表示不关心,也就是说这个信号的值不影响触发条件。

Low :表示为0时触发,也就是说触发条件包括该信号的值为0.

Falling Edge:下降沿触发。即该信号的下降沿是触发条件

Rising Edge:上升沿触发。

High:给为1时触发

Either Edge:双沿触发,即有变化时触发。

以上是对一个信号的触发。如果触发条件包含多个信号,如下图所示:

注意,各信号之间触发条件是“与”的关系,而非是“或”的关系。

e 点击“Run Analysis”按钮,开始抓波形

f 观看结果

如果触发条件成立,则可在Data窗口观察到采样波形。

点击波形,则可以放大波形观看;右击波形,则是缩小波形。

实验1:项目创建、编译和下载

1.1 实验内容

1个拨码开关控制所有LED灯亮灭

1.2 实验流程

·         新建项目

·         新建bdf文件添加inputoutput元件。bdf文件是该设计中的顶层文件。分析查看是否有错误

·         新建vwf文件,编译后运行仿真,查看波形,验证电路是否正确

·         使用assignments-pin planner配置fpga I/O管脚

·         下载文件至fpga,在菜单栏中选择tools-programmer。板子与电脑连接后打开电源。使用hardware setup确认板子与电脑连接无误,按下左栏start。如图

FPGA 电路开发入门实验_第5张图片

图1- 1 下载程序至FPGA

1.3 bdf文件

FPGA 电路开发入门实验_第6张图片

图1- 2 一个拨码开关控制10个LED

1.4 vwf文件

FPGA 电路开发入门实验_第7张图片

图1- 3 vwf图

可从图中看出,led等的亮灭由SW控制

1.5 配置管脚

FPGA 电路开发入门实验_第8张图片

图1- 4 LED管脚

FPGA 电路开发入门实验_第9张图片

图1- 5 拨码开关SW管脚

1.6 实验结果

将拨码开关拨到1,可看到所有LED灯亮起。

实验2FPGA译码器组合逻辑

2.1 实验内容

1.放置2个2-4译码器模块,每个译码器分别有两个SW输入,4个LED输出 
2.设计一个4-16译码器,4个SW输入,16个LED输出。将8个LED的管脚配置到的DE0开发板的一个7段共阳极数码管上。如图

使用SW输入0-9-A-F,共16个数字和字母,每个字母的显示有特定的共阳极编码。

2.2 两个2-4译码器

2.2.1 2-4译码器模块verilog代码

1.  module decoder2to4(

2.      input [1:0] IN,

3.      output reg [3:0] OUT

4.  );

5.  always @(IN)

6.  begin

7.      case(IN)

8.          2'b00:OUT=4'b0001;

9.          2'b01:OUT=4'b0010;

10.         2'b10:OUT=4'b0100;

11.         2'b11:OUT=4'b1000;

12.     endcase

13. end

14. endmodule

2.2.2 bdf顶层文件

·         注意粗线是总线,意思是多位数据通信

·         改变output和总线的名称为XXX[n..0]形式,对应数据位数为n+1


FPGA 电路开发入门实验_第10张图片

图2- 1 2个2-4译码器bdf图

2.2.3 RTL

FPGA 电路开发入门实验_第11张图片

图2- 2 顶层RTL图

 

FPGA 电路开发入门实验_第12张图片

图2- 3 2-4译码器模块RTL图


双击顶层文件中的decoder2to4,可查看2-4译码器的RTL图。由图可知,2-4译码器的主要组成部分是输入输出和DECODER。

2.2.4 管脚配置

·         pins in bdf: bdf文件中输入输出的管脚名称

·         pins in DE0: DE0开发板上管脚

·         pins in FPGA: FPGA内部管脚

pins in bdf

pins in DE0

pins in FPGA

sw0

SW0

PIN_J6

sw1

SW1

PIN_H5

sw3

SW2

PIN_H6

sw4

SW3

PIN_G4

LED1[0]

LEDG0

PIN_J1

LED1[1]

LEDG1

PIN_J2

LED1[2]

LEDG2

PIN_J3

LED1[3]

LEDG3

PIN_H1

LED2[0]

LEDG4

PIN_F2

LED2[0]

LEDG5

PIN_E1

LED2[1]

LEDG6

PIN_C1

LED2[2]

LEDG7

PIN_C2

2.2.5 实验结果

将程序下载到板子上,拨动开关为0010,可观察到亮起等为LDEG0(第一组第0个)和LEDG6(第二组第2个)。

2.3 4-16译码器,数码管显示值0-F

2.3.1 程序:4-16译码器输出共阳极数码管编码

程序中的parameter C0-Cf是共阳极数码管显示0-F16进制编码。

1.  module decoder(

2.  input [3:0] data_in,

3.  output reg [7:0]data_out

4.  );

5.  parameter C0=8'hc0,

6.              C1=8'hf9,

7.              C2=8'ha4,

8.              C3=8'hb0,

9.   

10.             C4=8'h99,

11.             C5=8'h92,

12.             C6=8'h82,

13.             C7=8'hf8,

14.  

15.             C8=8'h80,

16.             C9=8'h90,

17.             Ca=8'h88,

18.             Cb=8'h83,

19.  

20.             Cc=8'hc6,

21.             Cd=8'ha1,

22.             Ce=8'h86,

23.             Cf=8'h8e;

24.  

25. always @(data_in)

26. begin

27.  

28.     case(data_in)

29.     4'b0000:begin data_out=C0; end

30.     4'b0001:begin data_out=C1; end

31.     4'b0010:begin data_out=C2; end

32.     4'b0011:begin data_out=C3; end

33.     4'b0100:begin data_out=C4; end

34.     4'b0101:begin data_out=C5; end

35.     4'b0110:begin data_out=C6; end

36.     4'b0111:begin data_out=C7; end

37.     4'b1000:begin data_out=C8; end

38.     4'b1001:begin data_out=C9; end

39.     4'b1010:begin data_out=Ca; end

40.     4'b1011:begin data_out=Cb; end

41.     4'b1100:begin data_out=Cc; end

42.     4'b1101:begin data_out=Cd; end

43.     4'b1110:begin data_out=Ce; end

44.     4'b1111:begin data_out=Cf; end

45.     endcase

46. end

47. endmodule

2.3.2 bdf文件

FPGA 电路开发入门实验_第13张图片

图2- 4 十六位译码器bdf图

2.3.3 RTL

FPGA 电路开发入门实验_第14张图片

图2- 5 十六位译码器RTL图顶层

FPGA 电路开发入门实验_第15张图片

图2- 6 十六位译码器+输出共阴极编码


双击顶层RTL图的decoder,显示出4-16译码输出共阴极编码的RTL图。 
将Decoder0展开,可以看到译码输出后,使用逻辑或将译码器的16个输出整合成8位输出。 
例如图中红线,当data_in==4'b0100时,根据程序,data_out应为C4=8'h99。从RTL中可以看出,WideOr0-6=1001100,则data_out[7..0]={WideOr0-6,1'h1}=8'b10011001=8'h99。和程序中输出一致。

2.3.5 配置管脚

FPGA 电路开发入门实验_第16张图片

图2- 7 pin planner中配置管脚情况

2.3.6 实验结果

SW4的拨码开关拨至1,其他为0,数码管的输出为4.

实验3:计数器波形仿真和signalTap

3.1 实验内容

·         设计0-17计数器,当计数值为17时,OV输出为1,其他输出为0

·         当技术值为0-8时,OV输出09-17时,OV输出为1

·         学会signaltap的使用

3.2 0-17计数器

3.2.1 0-17计数器代码

1.  module counter17(

2.  input rst,

3.  input clk,

4.  output reg[4:0] counter_output,

5.  output ov

6.  );

7.  parameter COUNT_NUM=17;

8.  assign ov=(counter_output==17)?1:0;

9.  always @(posedge clk or negedge rst)

10. begin

11.     if(!rst)

12.     begin

13.         counter_output<=4'd0;

14.     end

15.     else

16.     begin

17.         if(counter_output

18.         begin counter_output<=counter_output+1'b1; end

19.         else

20.         begin counter_output<=4'b0; end

21.     end

22. end

23. endmodule

3.2.2 bdf文件

FPGA 电路开发入门实验_第17张图片

图3- 1 0-17计数器bdf图

3.2.3 RTL

FPGA 电路开发入门实验_第18张图片

图3- 2 0-17计数器RTL顶层图(含输入输出)

FPGA 电路开发入门实验_第19张图片

图3- 3 0-17计数器RTL图



3.2.4 vwf波形

图3- 4 0-17计数器vwf波形

由图可以看出,当计数值为17时,OV输出为1,其他输出为0

3.2.5 signaltap波形

signaltap使用流程

·         菜单栏选择新建文件,选择signaltap

·         setup页面添加采样时钟,即为fpga的输入时钟

·         分析/编译后添加待观察信号

·         编译,并将程序下载到开发板上。因为改变观察信号就改变了电路

·         运行得出波形如下


图3- 5 0-17计数器signaltap波形

可以看出,和vwf文件中的仿真波形一致

3.3 0-17计数器,0-8OV输出09-17输出1

3.3.1 计数器程序

计数器在0-8时输出09-17时输出1

1.  module counter20(

2.  input rst,

3.  input clk,

4.  output reg[4:0] counter_output,

5.  output ov

6.  );

7.  parameter COUNT_NUM=17;

8.  assign ov=(counter_output>8)?1:0;

9.  always @(posedge clk or negedge rst)

10. begin

11.     if(!rst)

12.     begin

13.         counter_output<=4'd0;

14.     end

15.     else

16.     begin

17.         if(counter_output

18.         begin counter_output<=counter_output+1'b1; end

19.         else

20.         begin counter_output<=4'b0; end

21.     end

22. end

23. endmodule

3.3.2 bdf文件

FPGA 电路开发入门实验_第20张图片

图3- 6 计数器bdf图

3.3.3 RTL

FPGA 电路开发入门实验_第21张图片

图3- 7 顶层RTL图

FPGA 电路开发入门实验_第22张图片

图3- 8 计数器RTL图

此计数器RTL图与前一个计数器的基本一致,除了OV输出条件值不同。

3.3.4 vwf文件

图3- 9 计数器vwf波形

本实验中,0-8时刻OV为0,9-17时刻为1。

3.3.5 signaltap波形

图3- 10 计数器signaltap波形

signaltap的波形与vwf仿真波形一致。

3.3.6 思考题:LED灯的状态

当时钟是50MHz,把OV接到LED上,LED常亮。因为虽然OV输出1是周期性的,但周期过小,根据视觉残留效应,LED灯看起来并没有变化。

实验4:时间基准电路和带使能的多周期计数器

4.1 时间基准电路介绍及实验内容

1.时间基准电路介绍

·         定时发出窄脉冲

2.典型情况时序

·         T时间,生成一个宽度为P时间的脉冲

·         电路的工作时钟周期为P

·         使用一个计数器实现该时序

3.本实验设计目标 
设计时间基准电路和带使能的多周期计数器 
时间基准电路生成同步时间基准信号 
本质上是两级计数器级联的电路结构:第一级计数器生成时间基准信号,第二级计数器用时间基准信号作为计数使能

4.实验内容

·         第一个实验是第一级计数器计数范围为25000000,第二级计数器计数范围为0-15。将计数器0-15计数值经过译码,在DE0的数码管上显示为0-9-a-f的十六进制数

·         第二个实验是修改时间基准发生器,设计使用两个数码管计时,范围0-9.9,精度为0.1。并给计时器增加清零和暂停功能

4.2 signaltap分段触发

signaltap的分段触发是一种高级触发方式。具体操作见0.2节。

4.2.1 操作过程

·         选择触发信号en_out,查看en_out改变时其他信号的值

·         如图选中segmented模式,68样点

·         如图每次抓取触发事件附近的波形样点,抓取多次

图4- 1 signaltap设置

4.2.2 分段触发的捕获原理

·         一次填充一段数据RAM

·         多次填充

·         全部RAM被填充后,由JTAGPC

4.3 计数器显示十六进制数字

4.3.1 模块代码

本文件包含的模块有第一级0.5计数器,第二级0-15计数器和十六进制译码器

(1) 0.5s计数器

1.  // clock frequency is 50Mhz, accuracy is 0.1s, 10hz.50M/10=5M, 23bit

2.  module cnt_sync(

3.      input clk,

4.      output reg [31:0] CNTVAL,

5.      output OV

6.  );

7.  parameter MAX_VAL=25_000_000;

8.  always @(posedge clk)

9.      if(CNTVAL>=MAX_VAL)begin CNTVAL<=0; end

10.     else begin CNTVAL<=CNTVAL+1'b1; end

11.  

12. assign OV=(CNTVAL==MAX_VAL)?1:0;

13. endmodule

(2) 0-15计数器

1.  module cnt_en(

2.      input clk,

3.      input en,

4.      output reg[3:0] CNTVAL,

5.      output OV

6.  );

7.  always @(posedge clk)

8.      if(en)

9.      begin

10.         if(CNTVAL>=15)begin CNTVAL<=0; end

11.         else begin CNTVAL<=CNTVAL+1'b1; end

12.     end

13.     else

14.     begin

15.         CNTVAL<=CNTVAL;

16.     end

17. assign OV=(CNTVAL==15)?1:0;

18. endmodule

(3) 十六进制译码器

1.  module decoder(

2.  input [3:0] data_in,

3.  output reg [7:0]data_out

4.  );

5.  parameter C0=8'hc0,

6.              C1=8'hf9,

7.              C2=8'ha4,

8.              C3=8'hb0,

9.   

10.             C4=8'h99,

11.             C5=8'h92,

12.             C6=8'h82,

13.             C7=8'hf8,

14.  

15.             C8=8'h80,

16.             C9=8'h90,

17.             Ca=8'h88,

18.             Cb=8'h83,

19.  

20.             Cc=8'hc6,

21.             Cd=8'ha1,

22.             Ce=8'h86,

23.             Cf=8'h8e;

24.  

25. always @(data_in)

26. begin

27.  

28.     case(data_in)

29.     4'b0000:begin data_out=C0; end

30.     4'b0001:begin data_out=C1; end

31.     4'b0010:begin data_out=C2; end

32.     4'b0011:begin data_out=C3; end

33.     4'b0100:begin data_out=C4; end

34.     4'b0101:begin data_out=C5; end

35.     4'b0110:begin data_out=C6; end

36.     4'b0111:begin data_out=C7; end

37.     4'b1000:begin data_out=C8; end

38.     4'b1001:begin data_out=C9; end

39.     4'b1010:begin data_out=Ca; end

40.     4'b1011:begin data_out=Cb; end

41.     4'b1100:begin data_out=Cc; end

42.     4'b1101:begin data_out=Cd; end

43.     4'b1110:begin data_out=Ce; end

44.     4'b1111:begin data_out=Cf; end

45.     endcase

46. end

47.  

48.  

49. endmodule

4.3.2 bdf文件

图4- 2 计数器显示十六进制译码bdf图

4.3.3 RTL

图4- 3 顶层RTL图

 

图4- 4 0.5s计数器RTL图


图4- 5 0-15计数器RTL图


图4- 6 十六进制译码器+数码管显示RTL图

4.3.4 vwf文件

图4- 7 vwf波形

可以看出vwf文件1ms内各项输出基本无变化,因此要使用signaltap分段触发。

4.3.5 signaltap波形

图4- 8 signaltap波形

使用了分段触发方式,可以观察到在en_out上升沿时各信号改变情况。

4.4 0-9.9计时器

·         设计使用两个数码管计时,范围0-9.9,精度为0.1

·         给计时器增加清零(rst)和暂停(stop)功能

4.4.1 模块代码

使用模块包括0.1s计数器和1s计数器,10s计数器,两个数码管显示分别从09

(1)   0.1s计数器

注意事项:

·         0.1s计数器

·         按下rst键,将两个计数器的CNTVAL都置零

·         按下stop键,停止或继续计数

1.  // clock frequency is 50Mhz, accuracy is 0.1s, 10hz.50M/10=5M, 23bit

2.  module cnt_100ms(

3.      input clk,

4.      output reg [22:0] CNTVAL,

5.      output OV

6.      ,input rst

7.      ,input stop

8.  );

9.  parameter MAX_VAL=5_000_000;

10. reg state;

11. always @(posedge clk

12. or negedge rst)

13.     if(!rst)

14.     begin

15.         CNTVAL<=23'b0;

16.     end

17.     else if(state==1)

18.     begin

19.         CNTVAL<=CNTVAL;

20.     end

21.         else

22.         begin

23.             if(CNTVAL>=MAX_VAL)begin CNTVAL<=0; end

24.             else begin CNTVAL<=CNTVAL+1'b1; end

25.         end

26. always @(negedge stop)

27.     if(!stop) state<=~state;

28.  

29. assign OV=(CNTVAL==MAX_VAL)?1:0;

30. endmodule

(2) 9进制计数器

1.  module cnt_9(

2.      input clk,

3.      input en,

4.      output reg[3:0] CNTVAL,

5.      output OV

6.      ,input rst

7.  );

8.  always @(posedge clk or negedge rst)

9.      if(!rst)

10.         begin

11.             CNTVAL<=4'd0;

12.             //CNTVAL<=4'd5;

13.         end

14.     else if(en)    

15.             begin

16.                 if(CNTVAL>=9)begin CNTVAL<=4'd0; end

17.                 else

18.                     begin CNTVAL<=CNTVAL+1'b1;

19.                             //CNTVAL<=4'd14;

20.                     end

21.             end

22.         else

23.             begin

24.                 CNTVAL<=CNTVAL;

25.                 //CNTVAL<=4'b1111;

26.             end

27. assign OV=(CNTVAL==9)?1:0;

28. endmodule

(3) 十进制译码器

1.  module decoder(

2.  input [3:0] data_in,

3.  output reg [7:0]data_out

4.  );

5.  parameter C0=8'hc0,

6.              C1=8'hf9,

7.              C2=8'ha4,

8.              C3=8'hb0,

9.   

10.             C4=8'h99,

11.             C5=8'h92,

12.             C6=8'h82,

13.             C7=8'hf8,

14.  

15.             C8=8'h80,

16.             C9=8'h90;

17. /*          Ca=8'h88,

18.             Cb=8'h83,

19.  

20.             Cc=8'hc6,

21.             Cd=8'ha1,

22.             Ce=8'h86,

23.             Cf=8'h8e;

24. */

25. always @(data_in)

26. begin

27.  

28.     case(data_in)

29.     4'b0000:begin data_out=C0; end

30.     4'b0001:begin data_out=C1; end

31.     4'b0010:begin data_out=C2; end

32.     4'b0011:begin data_out=C3; end

33.     4'b0100:begin data_out=C4; end

34.     4'b0101:begin data_out=C5; end

35.     4'b0110:begin data_out=C6; end

36.     4'b0111:begin data_out=C7; end

37.     4'b1000:begin data_out=C8; end

38.     4'b1001:begin data_out=C9; end

39. /*  4'b1010:begin data_out=Ca; end

40.     4'b1011:begin data_out=Cb; end

41.     4'b1100:begin data_out=Cc; end

42.     4'b1101:begin data_out=Cd; end

43.     4'b1110:begin data_out=Ce; end

44.     4'b1111:begin data_out=Cf; end

45. */

46.     endcase

47. end

48.  

49.  

50. endmodule

4.4.2 bdf文件

图4- 9 0-9.9s计时+显示的bdf图

4.4.3 RTL

图4- 10 顶层RTL图

图4- 11 0.1s计时器RTL图

图4- 12 0-9计数器RTL图

图4- 13 十进制译码器

4.4.4 vwf文件

图4- 14 vwf波形

只能看到0.1s计时器的cnt寄存器随着时间改变值的大小。

4.4.5 signaltap波形

图中可以观测到,0.1s计数器的ov到上升沿时,第一个十进制计数器的值改变,等第一个十进制的值已经到9并且再次迎来ov上升沿时,第二个十进制计数器的值加一。

最后的FPGA的两个数码管加一个小数点可以实现从0.0-9.9的十秒重复计时。

实验五:多周期移位寄存器

5.1 实验内容

设计时间基准电路和带使能的多周期移位寄存器

·         电路工作在50MHz

·         在每个时间基准信号有效的时钟周期 
– 
把一个拨码开关的状态值移位输入到寄存器的最低位 
– 
顺序移动移位寄存器的值 
– 
寄存器的每个比特送至一个LED灯上显示 
连续拨动SW0开关,发现LED灯按拨置1的情况左移亮灭

·         设计新的功能 
– 
在原有的电路基础上,添加方向选择功能。 
– SW0
仍然是移位寄存器组的输入 
– 
使用SW1开关,控制移位寄存的方向 
– 
从实验现象上应当能够看到,SW1可以控制LED闪烁的移动方向,以及控制SW0值的对LED组的输入位置(即从LED组的最左边或是最右边)

5.2 模块代码

5.2.1 时间基准计数器,0.5s

1.  //时间基准计数器

2.  module cnt(

3.      input clk,

4.      output reg [31:0] CNTVAL,

5.      output OV

6.  );

7.  parameter MAX_VAL=25_000_000;

8.  always @(posedge clk)

9.      if(CNTVAL>=MAX_VAL)begin CNTVAL<=32'd0; end

10.     else begin CNTVAL<=CNTVAL+1'b1; end

11. assign OV=(CNTVAL==MAX_VAL)? 1:0;

12. endmodule

5.2.2 串入并出移位寄存器

1.  module shift_reg_SIPO(

2.      input rst,

3.      input clk,

4.      input en,

5.      input IN,

6.      input Direct,

7.      output [SHLEN-1:0] OUT

8.   

9.  );

10. parameter SHLEN=6;

11. reg [SHLEN-1:0] shift;

12. assign OUT=shift;

13.  

14. always @(posedge clk or negedge rst)

15.     if(!rst)begin shift<=6'd0; end

16.     else

17.         if(en)

18.         begin

19.             if(Direct)//sw1=1

20.             begin

21.                 shift[SHLEN-1:1]<=shift[SHLEN-2:0];

22.                 shift[0]<=IN;

23.             end

24.             else//sw1=0

25.             begin

26.                 shift[SHLEN-2:0]<=shift[SHLEN-1:1];

27.                 shift[SHLEN-1]<=IN;

28.             end

29.         end

30. endmodule

5.3 bdf文件

图4- 15 左右移位寄存器bdf图

图中输入信号有clk50M(50MHz时钟G21)、rst(按钮button0)、输入值sw0(拨码开关sw0)、改变信号方向的输入信号sw1(拨码开关sw1)。

输出信号接到led灯上。

5.4 rtl

图5- 1 顶层RTL图

图5- 2 0.5s计时器RTL图

图5- 3 左右移位寄存器RTL图

可以看出它的输入控制信号有5个。

 

5.5 vwf文件

图5- 4 vwf波形

时间范围设置小,看不到具体输出,只能观察到计数器的数值在增加

5.6 signaltap文件

图5- 5 signaltap波形

ov作为触发信号进行分段触发。观察到ov上升沿时输入Direct(sw1)IN(sw0)改变,输出OUT(LEDG[5:0])也随之改变

移位寄存器将串行输入转为并行信号。

实验六:计数器、ROMDDS

6.1 实验内容

·         设计一个DDS模块,在FPGA芯片内部合成数字波形。计数器增量信号(ROM地址)为10bit,量化值10bit

·         将计数增量输入信号分配到10个拨码开关上

6.2 基础知识

DDS输出频率公式

                                                   (6-1)

:输出正弦波频率

:增量计数器的增量值,又称频率控制字

:时钟频率,即50MHz

ROM地址的宽度,也是增量计数器输出的宽度

由公式可知

(1)   正弦波频率最低为,即K=1

(2)   增大N,即可正弦波的最低频率还能降低

6.3 模块代码

6.3.1 生成ROM表的matlab函数及文件

·         使用matlab生成ROM

·         rom_gen.m

·         10bit量化

1.  %假设用到的DA芯片为10,width,对应量化

2.  %正弦波ROM的深度为1024(地址总数),对应采样

3.  %ROM中数据为一个整周期正弦波1024点采样,每个样点采用10比特量化,数据范围(-1,1),二进制补码格式

4.  %本实验中量化10bit

5.  function []=rom_gen()

6.  depth=1024;

7.  %width=8;

8.  width=10;

9.  %x=ceil(power(2,8)/2*sin(0:pi*2/depth:2*pi))

10. x=ceil((power(2,width)/2-1)*sin(0:pi*2/depth:2*pi));

11. fid=fopen('D:\useful\fpga\quaters\basic6\prj6\matlabtest\sine_rom.v','w');

12.  

13. fprintf(fid,'module sine_rom(\n');

14. fprintf(fid,'    input clk,\n');

15. fprintf(fid,'    input [9:0] RA,\n');

16. fprintf(fid,'    output reg[9:0] RD );\n');

17. fprintf(fid,'always @ (posedge clk)\n');

18. fprintf(fid,'case(RA)\n');

19. for k=1:depth

20. %fprintf(fid,'10''d %d :RD=#1 8''b %d ;\n',k-1,x(k));

21. fprintf(fid,'10''d %d :RD=#1 10''b %s ;\n',k-1,dec2binPN(x(k),10));

22. end

23. fprintf(fid,'default: RD=#1 0;\n');

24. fprintf(fid,'endcase\n');

25. fprintf(fid,'endmodule\n');

·         rom_gen.m中使用函数dec2binPN(numdec,N)

·         dec2binPN()是将符号整数转换为二进制序列的函数

1.  % https://wenku.baidu.com/view/6c477149336c1eb91a375d3a.html

2.  function [numbin]=dec2binPN(numdec, N)

3.  if(numdec>=0)

4.      numbin1=dec2bin(numdec,N);

5.  else

6.      numbin1=dec2bin(abs(numdec),N);

7.      l1=length(numbin1);

8.      numbin4=0;

9.      for i=1:l1

10.         if(numbin1(l1-i+1)==num2str(1))

11.         %matlab字符串数组s(n)sn

12.         %按位取反,用十进制表示

13.         numbin4=numbin4+0;

14.         else

15.         numbin4=numbin4+power(2,i-1);

16.         end

17.     end

18.     numbin4=numbin4+1;

19.     numbin1=dec2bin(numbin4,N);

20. end

21. numbin=numbin1;

6.3.2 ROM模块代码

1.  module sine_rom(

2.      input clk,

3.      input [9:0] RA,

4.      output reg[9:0] RD

5.      );

6.  always @ (posedge clk)

7.  case(RA)

8.  10'd 0 :RD=#1 10'0000000000 ;

9.  10'd 1 :RD=#1 10'0000000100 ;

10. 10'd 2 :RD=#1 10'0000000111 ;

11. 10'd 3 :RD=#1 10'0000001010 ;

12. 10'd 4 :RD=#1 10'0000001101 ;

13. 10'd 5 :RD=#1 10'0000010000 ;

14. 10'd 6 :RD=#1 10'0000010011 ;

15. 10'd 7 :RD=#1 10'0000010110 ;

16. 10'd 8 :RD=#1 10'0000011010 ;

17. 10'd 9 :RD=#1 10'0000011101 ;

18. 10'd 10 :RD=#1 10'0000100000 ;

19. 10'd 11 :RD=#1 10'0000100011 ;

20. 10'd 12 :RD=#1 10'0000100110 ;

21. 10'd 13 :RD=#1 10'0000101001 ;

22. 10'd 14 :RD=#1 10'0000101100 ;

23. 10'd 15 :RD=#1 10'0000101111 ;

24. 10'd 16 :RD=#1 10'0000110011 ;

25. 10'd 17 :RD=#1 10'0000110110 ;

26. 10'd 18 :RD=#1 10'0000111001 ;

27. 10'd 19 :RD=#1 10'0000111100 ;

28. 10'd 20 :RD=#1 10'0000111111 ;

29. 10'd 21 :RD=#1 10'0001000010 ;

30. 10'd 22 :RD=#1 10'0001000101 ;

31. 10'd 23 :RD=#1 10'0001001000 ;

32. 10'd 24 :RD=#1 10'0001001011 ;

33. 10'd 25 :RD=#1 10'0001001111 ;

34. 10'd 26 :RD=#1 10'0001010010 ;

35. 10'd 27 :RD=#1 10'0001010101 ;

36. 10'd 28 :RD=#1 10'0001011000 ;

37. 10'd 29 :RD=#1 10'0001011011 ;

38. 10'd 30 :RD=#1 10'0001011110 ;

39. 10'd 31 :RD=#1 10'0001100001 ;

40. 10'd 32 :RD=#1 10'0001100100 ;

41. 10'd 33 :RD=#1 10'0001100111 ;

42. 10'd 34 :RD=#1 10'0001101010 ;

43. 10'd 35 :RD=#1 10'0001101101 ;

44. 10'd 36 :RD=#1 10'0001110000 ;

45. 10'd 37 :RD=#1 10'0001110100 ;

46. 10'd 38 :RD=#1 10'0001110111 ;

47. 10'd 39 :RD=#1 10'0001111010 ;

48. 10'd 40 :RD=#1 10'0001111101 ;

49. 10'd 41 :RD=#1 10'0010000000 ;

50. 10'd 42 :RD=#1 10'0010000011 ;

51. 10'd 43 :RD=#1 10'0010000110 ;

52. 10'd 44 :RD=#1 10'0010001001 ;

53. 10'd 45 :RD=#1 10'0010001100 ;

54. 10'd 46 :RD=#1 10'0010001111 ;

55. 10'd 47 :RD=#1 10'0010010010 ;

56. 10'd 48 :RD=#1 10'0010010101 ;

57. 10'd 49 :RD=#1 10'0010011000 ;

58. 10'd 50 :RD=#1 10'0010011011 ;

59. 10'd 51 :RD=#1 10'0010011110 ;

60. 10'd 52 :RD=#1 10'0010100001 ;

61. 10'd 53 :RD=#1 10'0010100100 ;

62. 10'd 54 :RD=#1 10'0010100111 ;

63. 10'd 55 :RD=#1 10'0010101010 ;

64. 10'd 56 :RD=#1 10'0010101101 ;

65. 10'd 57 :RD=#1 10'0010110000 ;

66. 10'd 58 :RD=#1 10'0010110011 ;

67. 10'd 59 :RD=#1 10'0010110101 ;

68. 10'd 60 :RD=#1 10'0010111000 ;

69. 10'd 61 :RD=#1 10'0010111011 ;

70. 10'd 62 :RD=#1 10'0010111110 ;

71. 10'd 63 :RD=#1 10'0011000001 ;

72. 10'd 64 :RD=#1 10'0011000100 ;

73. 10'd 65 :RD=#1 10'0011000111 ;

74. 10'd 66 :RD=#1 10'0011001010 ;

75. 10'd 67 :RD=#1 10'0011001101 ;

76. 10'd 68 :RD=#1 10'0011010000 ;

77. 10'd 69 :RD=#1 10'0011010010 ;

78. 10'd 70 :RD=#1 10'0011010101 ;

79. 10'd 71 :RD=#1 10'0011011000 ;

80. 10'd 72 :RD=#1 10'0011011011 ;

81. 10'd 73 :RD=#1 10'0011011110 ;

82. 10'd 74 :RD=#1 10'0011100001 ;

83. 10'd 75 :RD=#1 10'0011100011 ;

84. 10'd 76 :RD=#1 10'0011100110 ;

85. 10'd 77 :RD=#1 10'0011101001 ;

86. 10'd 78 :RD=#1 10'0011101100 ;

87. 10'd 79 :RD=#1 10'0011101111 ;

88. 10'd 80 :RD=#1 10'0011110001 ;

89. 10'd 81 :RD=#1 10'0011110100 ;

90. 10'd 82 :RD=#1 10'0011110111 ;

91. 10'd 83 :RD=#1 10'0011111010 ;

92. 10'd 84 :RD=#1 10'0011111100 ;

93. 10'd 85 :RD=#1 10'0011111111 ;

94. 10'd 86 :RD=#1 10'0100000010 ;

95. 10'd 87 :RD=#1 10'0100000101 ;

96. 10'd 88 :RD=#1 10'0100000111 ;

97. 10'd 89 :RD=#1 10'0100001010 ;

98. 10'd 90 :RD=#1 10'0100001101 ;

99. 10'd 91 :RD=#1 10'0100001111 ;

100.    10'd 92 :RD=#1 10'0100010010 ;

101.    10'd 93 :RD=#1 10'0100010101 ;

102.    10'd 94 :RD=#1 10'0100010111 ;

103.    10'd 95 :RD=#1 10'0100011010 ;

104.    10'd 96 :RD=#1 10'0100011100 ;

105.    10'd 97 :RD=#1 10'0100011111 ;

106.    10'd 98 :RD=#1 10'0100100010 ;

107.    10'd 99 :RD=#1 10'0100100100 ;

108.    10'd 100 :RD=#1 10'0100100111 ;

109.    10'd 101 :RD=#1 10'0100101001 ;

110.    10'd 102 :RD=#1 10'0100101100 ;

111.    10'd 103 :RD=#1 10'0100101110 ;

112.    10'd 104 :RD=#1 10'0100110001 ;

113.    10'd 105 :RD=#1 10'0100110011 ;

114.    10'd 106 :RD=#1 10'0100110110 ;

115.    10'd 107 :RD=#1 10'0100111000 ;

116.    10'd 108 :RD=#1 10'0100111011 ;

117.    10'd 109 :RD=#1 10'0100111101 ;

118.    10'd 110 :RD=#1 10'0101000000 ;

119.    10'd 111 :RD=#1 10'0101000010 ;

120.    10'd 112 :RD=#1 10'0101000101 ;

121.    10'd 113 :RD=#1 10'0101000111 ;

122.    10'd 114 :RD=#1 10'0101001001 ;

123.    10'd 115 :RD=#1 10'0101001100 ;

124.    10'd 116 :RD=#1 10'0101001110 ;

125.    10'd 117 :RD=#1 10'0101010001 ;

126.    10'd 118 :RD=#1 10'0101010011 ;

127.    10'd 119 :RD=#1 10'0101010101 ;

128.    10'd 120 :RD=#1 10'0101011000 ;

129.    10'd 121 :RD=#1 10'0101011010 ;

130.    10'd 122 :RD=#1 10'0101011100 ;

131.    10'd 123 :RD=#1 10'0101011111 ;

132.    10'd 124 :RD=#1 10'0101100001 ;

133.    10'd 125 :RD=#1 10'0101100011 ;

134.    10'd 126 :RD=#1 10'0101100101 ;

135.    10'd 127 :RD=#1 10'0101101000 ;

136.    10'd 128 :RD=#1 10'0101101010 ;

137.    10'd 129 :RD=#1 10'0101101100 ;

138.    10'd 130 :RD=#1 10'0101101110 ;

139.    10'd 131 :RD=#1 10'0101110000 ;

140.    10'd 132 :RD=#1 10'0101110011 ;

141.    10'd 133 :RD=#1 10'0101110101 ;

142.    10'd 134 :RD=#1 10'0101110111 ;

143.    10'd 135 :RD=#1 10'0101111001 ;

144.    10'd 136 :RD=#1 10'0101111011 ;

145.    10'd 137 :RD=#1 10'0101111101 ;

146.    10'd 138 :RD=#1 10'0101111111 ;

147.    10'd 139 :RD=#1 10'0110000001 ;

148.    10'd 140 :RD=#1 10'0110000011 ;

149.    10'd 141 :RD=#1 10'0110000101 ;

150.    10'd 142 :RD=#1 10'0110001000 ;

151.    10'd 143 :RD=#1 10'0110001010 ;

152.    10'd 144 :RD=#1 10'0110001100 ;

153.    10'd 145 :RD=#1 10'0110001101 ;

154.    10'd 146 :RD=#1 10'0110001111 ;

155.    10'd 147 :RD=#1 10'0110010001 ;

156.    10'd 148 :RD=#1 10'0110010011 ;

157.    10'd 149 :RD=#1 10'0110010101 ;

158.    10'd 150 :RD=#1 10'0110010111 ;

159.    10'd 151 :RD=#1 10'0110011001 ;

160.    10'd 152 :RD=#1 10'0110011011 ;

161.    10'd 153 :RD=#1 10'0110011101 ;

162.    10'd 154 :RD=#1 10'0110011111 ;

163.    10'd 155 :RD=#1 10'0110100000 ;

164.    10'd 156 :RD=#1 10'0110100010 ;

165.    10'd 157 :RD=#1 10'0110100100 ;

166.    10'd 158 :RD=#1 10'0110100110 ;

167.    10'd 159 :RD=#1 10'0110101000 ;

168.    10'd 160 :RD=#1 10'0110101001 ;

169.    10'd 161 :RD=#1 10'0110101011 ;

170.    10'd 162 :RD=#1 10'0110101101 ;

171.    10'd 163 :RD=#1 10'0110101111 ;

172.    10'd 164 :RD=#1 10'0110110000 ;

173.    10'd 165 :RD=#1 10'0110110010 ;

174.    10'd 166 :RD=#1 10'0110110100 ;

175.    10'd 167 :RD=#1 10'0110110101 ;

176.    10'd 168 :RD=#1 10'0110110111 ;

177.    10'd 169 :RD=#1 10'0110111000 ;

178.    10'd 170 :RD=#1 10'0110111010 ;

179.    10'd 171 :RD=#1 10'0110111100 ;

180.    10'd 172 :RD=#1 10'0110111101 ;

181.    10'd 173 :RD=#1 10'0110111111 ;

182.    10'd 174 :RD=#1 10'0111000000 ;

183.    10'd 175 :RD=#1 10'0111000010 ;

184.    10'd 176 :RD=#1 10'0111000011 ;

185.    10'd 177 :RD=#1 10'0111000101 ;

186.    10'd 178 :RD=#1 10'0111000110 ;

187.    10'd 179 :RD=#1 10'0111001000 ;

188.    10'd 180 :RD=#1 10'0111001001 ;

189.    10'd 181 :RD=#1 10'0111001010 ;

190.    10'd 182 :RD=#1 10'0111001100 ;

191.    10'd 183 :RD=#1 10'0111001101 ;

192.    10'd 184 :RD=#1 10'0111001110 ;

193.    10'd 185 :RD=#1 10'0111010000 ;

194.    10'd 186 :RD=#1 10'0111010001 ;

195.    10'd 187 :RD=#1 10'0111010010 ;

196.    10'd 188 :RD=#1 10'0111010100 ;

197.    10'd 189 :RD=#1 10'0111010101 ;

198.    10'd 190 :RD=#1 10'0111010110 ;

199.    10'd 191 :RD=#1 10'0111010111 ;

200.    10'd 192 :RD=#1 10'0111011001 ;

201.    10'd 193 :RD=#1 10'0111011010 ;

202.    10'd 194 :RD=#1 10'0111011011 ;

203.    10'd 195 :RD=#1 10'0111011100 ;

204.    10'd 196 :RD=#1 10'0111011101 ;

205.    10'd 197 :RD=#1 10'0111011110 ;

206.    10'd 198 :RD=#1 10'0111011111 ;

207.    10'd 199 :RD=#1 10'0111100001 ;

208.    10'd 200 :RD=#1 10'0111100010 ;

209.    10'd 201 :RD=#1 10'0111100011 ;

210.    10'd 202 :RD=#1 10'0111100100 ;

211.    10'd 203 :RD=#1 10'0111100101 ;

212.    10'd 204 :RD=#1 10'0111100110 ;

213.    10'd 205 :RD=#1 10'0111100111 ;

214.    10'd 206 :RD=#1 10'0111101000 ;

215.    10'd 207 :RD=#1 10'0111101001 ;

216.    10'd 208 :RD=#1 10'0111101001 ;

217.    10'd 209 :RD=#1 10'0111101010 ;

218.    10'd 210 :RD=#1 10'0111101011 ;

219.    10'd 211 :RD=#1 10'0111101100 ;

220.    10'd 212 :RD=#1 10'0111101101 ;

221.    10'd 213 :RD=#1 10'0111101110 ;

222.    10'd 214 :RD=#1 10'0111101111 ;

223.    10'd 215 :RD=#1 10'0111101111 ;

224.    10'd 216 :RD=#1 10'0111110000 ;

225.    10'd 217 :RD=#1 10'0111110001 ;

226.    10'd 218 :RD=#1 10'0111110010 ;

227.    10'd 219 :RD=#1 10'0111110010 ;

228.    10'd 220 :RD=#1 10'0111110011 ;

229.    10'd 221 :RD=#1 10'0111110100 ;

230.    10'd 222 :RD=#1 10'0111110100 ;

231.    10'd 223 :RD=#1 10'0111110101 ;

232.    10'd 224 :RD=#1 10'0111110110 ;

233.    10'd 225 :RD=#1 10'0111110110 ;

234.    10'd 226 :RD=#1 10'0111110111 ;

235.    10'd 227 :RD=#1 10'0111110111 ;

236.    10'd 228 :RD=#1 10'0111111000 ;

237.    10'd 229 :RD=#1 10'0111111001 ;

238.    10'd 230 :RD=#1 10'0111111001 ;

239.    10'd 231 :RD=#1 10'0111111001 ;

240.    10'd 232 :RD=#1 10'0111111010 ;

241.    10'd 233 :RD=#1 10'0111111010 ;

242.    10'd 234 :RD=#1 10'0111111011 ;

243.    10'd 235 :RD=#1 10'0111111011 ;

244.    10'd 236 :RD=#1 10'0111111100 ;

245.    10'd 237 :RD=#1 10'0111111100 ;

246.    10'd 238 :RD=#1 10'0111111100 ;

247.    10'd 239 :RD=#1 10'0111111101 ;

248.    10'd 240 :RD=#1 10'0111111101 ;

249.    10'd 241 :RD=#1 10'0111111101 ;

250.    10'd 242 :RD=#1 10'0111111110 ;

251.    10'd 243 :RD=#1 10'0111111110 ;

252.    10'd 244 :RD=#1 10'0111111110 ;

253.    10'd 245 :RD=#1 10'0111111110 ;

254.    10'd 246 :RD=#1 10'0111111111 ;

255.    10'd 247 :RD=#1 10'0111111111 ;

256.    10'd 248 :RD=#1 10'0111111111 ;

257.    10'd 249 :RD=#1 10'0111111111 ;

258.    10'd 250 :RD=#1 10'0111111111 ;

259.    10'd 251 :RD=#1 10'0111111111 ;

260.    10'd 252 :RD=#1 10'0111111111 ;

261.    10'd 253 :RD=#1 10'0111111111 ;

262.    10'd 254 :RD=#1 10'0111111111 ;

263.    10'd 255 :RD=#1 10'0111111111 ;

264.    10'd 256 :RD=#1 10'0111111111 ;

265.    10'd 257 :RD=#1 10'0111111111 ;

266.    10'd 258 :RD=#1 10'0111111111 ;

267.    10'd 259 :RD=#1 10'0111111111 ;

268.    10'd 260 :RD=#1 10'0111111111 ;

269.    10'd 261 :RD=#1 10'0111111111 ;

270.    10'd 262 :RD=#1 10'0111111111 ;

271.    10'd 263 :RD=#1 10'0111111111 ;

272.    10'd 264 :RD=#1 10'0111111111 ;

273.    10'd 265 :RD=#1 10'0111111111 ;

274.    10'd 266 :RD=#1 10'0111111111 ;

275.    10'd 267 :RD=#1 10'0111111110 ;

276.    10'd 268 :RD=#1 10'0111111110 ;

277.    10'd 269 :RD=#1 10'0111111110 ;

278.    10'd 270 :RD=#1 10'0111111110 ;

279.    10'd 271 :RD=#1 10'0111111101 ;

280.    10'd 272 :RD=#1 10'0111111101 ;

281.    10'd 273 :RD=#1 10'0111111101 ;

282.    10'd 274 :RD=#1 10'0111111100 ;

283.    10'd 275 :RD=#1 10'0111111100 ;

284.    10'd 276 :RD=#1 10'0111111100 ;

285.    10'd 277 :RD=#1 10'0111111011 ;

286.    10'd 278 :RD=#1 10'0111111011 ;

287.    10'd 279 :RD=#1 10'0111111010 ;

288.    10'd 280 :RD=#1 10'0111111010 ;

289.    10'd 281 :RD=#1 10'0111111001 ;

290.    10'd 282 :RD=#1 10'0111111001 ;

291.    10'd 283 :RD=#1 10'0111111001 ;

292.    10'd 284 :RD=#1 10'0111111000 ;

293.    10'd 285 :RD=#1 10'0111110111 ;

294.    10'd 286 :RD=#1 10'0111110111 ;

295.    10'd 287 :RD=#1 10'0111110110 ;

296.    10'd 288 :RD=#1 10'0111110110 ;

297.    10'd 289 :RD=#1 10'0111110101 ;

298.    10'd 290 :RD=#1 10'0111110100 ;

299.    10'd 291 :RD=#1 10'0111110100 ;

300.    10'd 292 :RD=#1 10'0111110011 ;

301.    10'd 293 :RD=#1 10'0111110010 ;

302.    10'd 294 :RD=#1 10'0111110010 ;

303.    10'd 295 :RD=#1 10'0111110001 ;

304.    10'd 296 :RD=#1 10'0111110000 ;

305.    10'd 297 :RD=#1 10'0111101111 ;

306.    10'd 298 :RD=#1 10'0111101111 ;

307.    10'd 299 :RD=#1 10'0111101110 ;

308.    10'd 300 :RD=#1 10'0111101101 ;

309.    10'd 301 :RD=#1 10'0111101100 ;

310.    10'd 302 :RD=#1 10'0111101011 ;

311.    10'd 303 :RD=#1 10'0111101010 ;

312.    10'd 304 :RD=#1 10'0111101001 ;

313.    10'd 305 :RD=#1 10'0111101001 ;

314.    10'd 306 :RD=#1 10'0111101000 ;

315.    10'd 307 :RD=#1 10'0111100111 ;

316.    10'd 308 :RD=#1 10'0111100110 ;

317.    10'd 309 :RD=#1 10'0111100101 ;

318.    10'd 310 :RD=#1 10'0111100100 ;

319.    10'd 311 :RD=#1 10'0111100011 ;

320.    10'd 312 :RD=#1 10'0111100010 ;

321.    10'd 313 :RD=#1 10'0111100001 ;

322.    10'd 314 :RD=#1 10'0111011111 ;

323.    10'd 315 :RD=#1 10'0111011110 ;

324.    10'd 316 :RD=#1 10'0111011101 ;

325.    10'd 317 :RD=#1 10'0111011100 ;

326.    10'd 318 :RD=#1 10'0111011011 ;

327.    10'd 319 :RD=#1 10'0111011010 ;

328.    10'd 320 :RD=#1 10'0111011001 ;

329.    10'd 321 :RD=#1 10'0111010111 ;

330.    10'd 322 :RD=#1 10'0111010110 ;

331.    10'd 323 :RD=#1 10'0111010101 ;

332.    10'd 324 :RD=#1 10'0111010100 ;

333.    10'd 325 :RD=#1 10'0111010010 ;

334.    10'd 326 :RD=#1 10'0111010001 ;

335.    10'd 327 :RD=#1 10'0111010000 ;

336.    10'd 328 :RD=#1 10'0111001110 ;

337.    10'd 329 :RD=#1 10'0111001101 ;

338.    10'd 330 :RD=#1 10'0111001100 ;

339.    10'd 331 :RD=#1 10'0111001010 ;

340.    10'd 332 :RD=#1 10'0111001001 ;

341.    10'd 333 :RD=#1 10'0111001000 ;

342.    10'd 334 :RD=#1 10'0111000110 ;

343.    10'd 335 :RD=#1 10'0111000101 ;

344.    10'd 336 :RD=#1 10'0111000011 ;

345.    10'd 337 :RD=#1 10'0111000010 ;

346.    10'd 338 :RD=#1 10'0111000000 ;

347.    10'd 339 :RD=#1 10'0110111111 ;

348.    10'd 340 :RD=#1 10'0110111101 ;

349.    10'd 341 :RD=#1 10'0110111100 ;

350.    10'd 342 :RD=#1 10'0110111010 ;

351.    10'd 343 :RD=#1 10'0110111000 ;

352.    10'd 344 :RD=#1 10'0110110111 ;

353.    10'd 345 :RD=#1 10'0110110101 ;

354.    10'd 346 :RD=#1 10'0110110100 ;

355.    10'd 347 :RD=#1 10'0110110010 ;

356.    10'd 348 :RD=#1 10'0110110000 ;

357.    10'd 349 :RD=#1 10'0110101111 ;

358.    10'd 350 :RD=#1 10'0110101101 ;

359.    10'd 351 :RD=#1 10'0110101011 ;

360.    10'd 352 :RD=#1 10'0110101001 ;

361.    10'd 353 :RD=#1 10'0110101000 ;

362.    10'd 354 :RD=#1 10'0110100110 ;

363.    10'd 355 :RD=#1 10'0110100100 ;

364.    10'd 356 :RD=#1 10'0110100010 ;

365.    10'd 357 :RD=#1 10'0110100000 ;

366.    10'd 358 :RD=#1 10'0110011111 ;

367.    10'd 359 :RD=#1 10'0110011101 ;

368.    10'd 360 :RD=#1 10'0110011011 ;

369.    10'd 361 :RD=#1 10'0110011001 ;

370.    10'd 362 :RD=#1 10'0110010111 ;

371.    10'd 363 :RD=#1 10'0110010101 ;

372.    10'd 364 :RD=#1 10'0110010011 ;

373.    10'd 365 :RD=#1 10'0110010001 ;

374.    10'd 366 :RD=#1 10'0110001111 ;

375.    10'd 367 :RD=#1 10'0110001101 ;

376.    10'd 368 :RD=#1 10'0110001100 ;

377.    10'd 369 :RD=#1 10'0110001010 ;

378.    10'd 370 :RD=#1 10'0110001000 ;

379.    10'd 371 :RD=#1 10'0110000101 ;

380.    10'd 372 :RD=#1 10'0110000011 ;

381.    10'd 373 :RD=#1 10'0110000001 ;

382.    10'd 374 :RD=#1 10'0101111111 ;

383.    10'd 375 :RD=#1 10'0101111101 ;

384.    10'd 376 :RD=#1 10'0101111011 ;

385.    10'd 377 :RD=#1 10'0101111001 ;

386.    10'd 378 :RD=#1 10'0101110111 ;

387.    10'd 379 :RD=#1 10'0101110101 ;

388.    10'd 380 :RD=#1 10'0101110011 ;

389.    10'd 381 :RD=#1 10'0101110000 ;

390.    10'd 382 :RD=#1 10'0101101110 ;

391.    10'd 383 :RD=#1 10'0101101100 ;

392.    10'd 384 :RD=#1 10'0101101010 ;

393.    10'd 385 :RD=#1 10'0101101000 ;

394.    10'd 386 :RD=#1 10'0101100101 ;

395.    10'd 387 :RD=#1 10'0101100011 ;

396.    10'd 388 :RD=#1 10'0101100001 ;

397.    10'd 389 :RD=#1 10'0101011111 ;

398.    10'd 390 :RD=#1 10'0101011100 ;

399.    10'd 391 :RD=#1 10'0101011010 ;

400.    10'd 392 :RD=#1 10'0101011000 ;

401.    10'd 393 :RD=#1 10'0101010101 ;

402.    10'd 394 :RD=#1 10'0101010011 ;

403.    10'd 395 :RD=#1 10'0101010001 ;

404.    10'd 396 :RD=#1 10'0101001110 ;

405.    10'd 397 :RD=#1 10'0101001100 ;

406.    10'd 398 :RD=#1 10'0101001001 ;

407.    10'd 399 :RD=#1 10'0101000111 ;

408.    10'd 400 :RD=#1 10'0101000101 ;

409.    10'd 401 :RD=#1 10'0101000010 ;

410.    10'd 402 :RD=#1 10'0101000000 ;

411.    10'd 403 :RD=#1 10'0100111101 ;

412.    10'd 404 :RD=#1 10'0100111011 ;

413.    10'd 405 :RD=#1 10'0100111000 ;

414.    10'd 406 :RD=#1 10'0100110110 ;

415.    10'd 407 :RD=#1 10'0100110011 ;

416.    10'd 408 :RD=#1 10'0100110001 ;

417.    10'd 409 :RD=#1 10'0100101110 ;

418.    10'd 410 :RD=#1 10'0100101100 ;

419.    10'd 411 :RD=#1 10'0100101001 ;

420.    10'd 412 :RD=#1 10'0100100111 ;

421.    10'd 413 :RD=#1 10'0100100100 ;

422.    10'd 414 :RD=#1 10'0100100010 ;

423.    10'd 415 :RD=#1 10'0100011111 ;

424.    10'd 416 :RD=#1 10'0100011100 ;

425.    10'd 417 :RD=#1 10'0100011010 ;

426.    10'd 418 :RD=#1 10'0100010111 ;

427.    10'd 419 :RD=#1 10'0100010101 ;

428.    10'd 420 :RD=#1 10'0100010010 ;

429.    10'd 421 :RD=#1 10'0100001111 ;

430.    10'd 422 :RD=#1 10'0100001101 ;

431.    10'd 423 :RD=#1 10'0100001010 ;

432.    10'd 424 :RD=#1 10'0100000111 ;

433.    10'd 425 :RD=#1 10'0100000101 ;

434.    10'd 426 :RD=#1 10'0100000010 ;

435.    10'd 427 :RD=#1 10'0011111111 ;

436.    10'd 428 :RD=#1 10'0011111100 ;

437.    10'd 429 :RD=#1 10'0011111010 ;

438.    10'd 430 :RD=#1 10'0011110111 ;

439.    10'd 431 :RD=#1 10'0011110100 ;

440.    10'd 432 :RD=#1 10'0011110001 ;

441.    10'd 433 :RD=#1 10'0011101111 ;

442.    10'd 434 :RD=#1 10'0011101100 ;

443.    10'd 435 :RD=#1 10'0011101001 ;

444.    10'd 436 :RD=#1 10'0011100110 ;

445.    10'd 437 :RD=#1 10'0011100011 ;

446.    10'd 438 :RD=#1 10'0011100001 ;

447.    10'd 439 :RD=#1 10'0011011110 ;

448.    10'd 440 :RD=#1 10'0011011011 ;

449.    10'd 441 :RD=#1 10'0011011000 ;

450.    10'd 442 :RD=#1 10'0011010101 ;

451.    10'd 443 :RD=#1 10'0011010010 ;

452.    10'd 444 :RD=#1 10'0011010000 ;

453.    10'd 445 :RD=#1 10'0011001101 ;

454.    10'd 446 :RD=#1 10'0011001010 ;

455.    10'd 447 :RD=#1 10'0011000111 ;

456.    10'd 448 :RD=#1 10'0011000100 ;

457.    10'd 449 :RD=#1 10'0011000001 ;

458.    10'd 450 :RD=#1 10'0010111110 ;

459.    10'd 451 :RD=#1 10'0010111011 ;

460.    10'd 452 :RD=#1 10'0010111000 ;

461.    10'd 453 :RD=#1 10'0010110101 ;

462.    10'd 454 :RD=#1 10'0010110011 ;

463.    10'd 455 :RD=#1 10'0010110000 ;

464.    10'd 456 :RD=#1 10'0010101101 ;

465.    10'd 457 :RD=#1 10'0010101010 ;

466.    10'd 458 :RD=#1 10'0010100111 ;

467.    10'd 459 :RD=#1 10'0010100100 ;

468.    10'd 460 :RD=#1 10'0010100001 ;

469.    10'd 461 :RD=#1 10'0010011110 ;

470.    10'd 462 :RD=#1 10'0010011011 ;

471.    10'd 463 :RD=#1 10'0010011000 ;

472.    10'd 464 :RD=#1 10'0010010101 ;

473.    10'd 465 :RD=#1 10'0010010010 ;

474.    10'd 466 :RD=#1 10'0010001111 ;

475.    10'd 467 :RD=#1 10'0010001100 ;

476.    10'd 468 :RD=#1 10'0010001001 ;

477.    10'd 469 :RD=#1 10'0010000110 ;

478.    10'd 470 :RD=#1 10'0010000011 ;

479.    10'd 471 :RD=#1 10'0010000000 ;

480.    10'd 472 :RD=#1 10'0001111101 ;

481.    10'd 473 :RD=#1 10'0001111010 ;

482.    10'd 474 :RD=#1 10'0001110111 ;

483.    10'd 475 :RD=#1 10'0001110100 ;

484.    10'd 476 :RD=#1 10'0001110000 ;

485.    10'd 477 :RD=#1 10'0001101101 ;

486.    10'd 478 :RD=#1 10'0001101010 ;

487.    10'd 479 :RD=#1 10'0001100111 ;

488.    10'd 480 :RD=#1 10'0001100100 ;

489.    10'd 481 :RD=#1 10'0001100001 ;

490.    10'd 482 :RD=#1 10'0001011110 ;

491.    10'd 483 :RD=#1 10'0001011011 ;

492.    10'd 484 :RD=#1 10'0001011000 ;

493.    10'd 485 :RD=#1 10'0001010101 ;

494.    10'd 486 :RD=#1 10'0001010010 ;

495.    10'd 487 :RD=#1 10'0001001111 ;

496.    10'd 488 :RD=#1 10'0001001011 ;

497.    10'd 489 :RD=#1 10'0001001000 ;

498.    10'd 490 :RD=#1 10'0001000101 ;

499.    10'd 491 :RD=#1 10'0001000010 ;

500.    10'd 492 :RD=#1 10'0000111111 ;

501.    10'd 493 :RD=#1 10'0000111100 ;

502.    10'd 494 :RD=#1 10'0000111001 ;

503.    10'd 495 :RD=#1 10'0000110110 ;

504.    10'd 496 :RD=#1 10'0000110011 ;

505.    10'd 497 :RD=#1 10'0000101111 ;

506.    10'd 498 :RD=#1 10'0000101100 ;

507.    10'd 499 :RD=#1 10'0000101001 ;

508.    10'd 500 :RD=#1 10'0000100110 ;

509.    10'd 501 :RD=#1 10'0000100011 ;

510.    10'd 502 :RD=#1 10'0000100000 ;

511.    10'd 503 :RD=#1 10'0000011101 ;

512.    10'd 504 :RD=#1 10'0000011010 ;

513.    10'd 505 :RD=#1 10'0000010110 ;

514.    10'd 506 :RD=#1 10'0000010011 ;

515.    10'd 507 :RD=#1 10'0000010000 ;

516.    10'd 508 :RD=#1 10'0000001101 ;

517.    10'd 509 :RD=#1 10'0000001010 ;

518.    10'd 510 :RD=#1 10'0000000111 ;

519.    10'd 511 :RD=#1 10'0000000100 ;

520.    10'd 512 :RD=#1 10'0000000001 ;

521.    10'd 513 :RD=#1 10'1111111101 ;

522.    10'd 514 :RD=#1 10'1111111010 ;

523.    10'd 515 :RD=#1 10'1111110111 ;

524.    10'd 516 :RD=#1 10'1111110100 ;

525.    10'd 517 :RD=#1 10'1111110001 ;

526.    10'd 518 :RD=#1 10'1111101110 ;

527.    10'd 519 :RD=#1 10'1111101011 ;

528.    10'd 520 :RD=#1 10'1111100111 ;

529.    10'd 521 :RD=#1 10'1111100100 ;

530.    10'd 522 :RD=#1 10'1111100001 ;

531.    10'd 523 :RD=#1 10'1111011110 ;

532.    10'd 524 :RD=#1 10'1111011011 ;

533.    10'd 525 :RD=#1 10'1111011000 ;

534.    10'd 526 :RD=#1 10'1111010101 ;

535.    10'd 527 :RD=#1 10'1111010010 ;

536.    10'd 528 :RD=#1 10'1111001110 ;

537.    10'd 529 :RD=#1 10'1111001011 ;

538.    10'd 530 :RD=#1 10'1111001000 ;

539.    10'd 531 :RD=#1 10'1111000101 ;

540.    10'd 532 :RD=#1 10'1111000010 ;

541.    10'd 533 :RD=#1 10'1110111111 ;

542.    10'd 534 :RD=#1 10'1110111100 ;

543.    10'd 535 :RD=#1 10'1110111001 ;

544.    10'd 536 :RD=#1 10'1110110110 ;

545.    10'd 537 :RD=#1 10'1110110010 ;

546.    10'd 538 :RD=#1 10'1110101111 ;

547.    10'd 539 :RD=#1 10'1110101100 ;

548.    10'd 540 :RD=#1 10'1110101001 ;

549.    10'd 541 :RD=#1 10'1110100110 ;

550.    10'd 542 :RD=#1 10'1110100011 ;

551.    10'd 543 :RD=#1 10'1110100000 ;

552.    10'd 544 :RD=#1 10'1110011101 ;

553.    10'd 545 :RD=#1 10'1110011010 ;

554.    10'd 546 :RD=#1 10'1110010111 ;

555.    10'd 547 :RD=#1 10'1110010100 ;

556.    10'd 548 :RD=#1 10'1110010001 ;

557.    10'd 549 :RD=#1 10'1110001101 ;

558.    10'd 550 :RD=#1 10'1110001010 ;

559.    10'd 551 :RD=#1 10'1110000111 ;

560.    10'd 552 :RD=#1 10'1110000100 ;

561.    10'd 553 :RD=#1 10'1110000001 ;

562.    10'd 554 :RD=#1 10'1101111110 ;

563.    10'd 555 :RD=#1 10'1101111011 ;

564.    10'd 556 :RD=#1 10'1101111000 ;

565.    10'd 557 :RD=#1 10'1101110101 ;

566.    10'd 558 :RD=#1 10'1101110010 ;

567.    10'd 559 :RD=#1 10'1101101111 ;

568.    10'd 560 :RD=#1 10'1101101100 ;

569.    10'd 561 :RD=#1 10'1101101001 ;

570.    10'd 562 :RD=#1 10'1101100110 ;

571.    10'd 563 :RD=#1 10'1101100011 ;

572.    10'd 564 :RD=#1 10'1101100000 ;

573.    10'd 565 :RD=#1 10'1101011101 ;

574.    10'd 566 :RD=#1 10'1101011010 ;

575.    10'd 567 :RD=#1 10'1101010111 ;

576.    10'd 568 :RD=#1 10'1101010100 ;

577.    10'd 569 :RD=#1 10'1101010001 ;

578.    10'd 570 :RD=#1 10'1101001110 ;

579.    10'd 571 :RD=#1 10'1101001100 ;

580.    10'd 572 :RD=#1 10'1101001001 ;

581.    10'd 573 :RD=#1 10'1101000110 ;

582.    10'd 574 :RD=#1 10'1101000011 ;

583.    10'd 575 :RD=#1 10'1101000000 ;

584.    10'd 576 :RD=#1 10'1100111101 ;

585.    10'd 577 :RD=#1 10'1100111010 ;

586.    10'd 578 :RD=#1 10'1100110111 ;

587.    10'd 579 :RD=#1 10'1100110100 ;

588.    10'd 580 :RD=#1 10'1100110001 ;

589.    10'd 581 :RD=#1 10'1100101111 ;

590.    10'd 582 :RD=#1 10'1100101100 ;

591.    10'd 583 :RD=#1 10'1100101001 ;

592.    10'd 584 :RD=#1 10'1100100110 ;

593.    10'd 585 :RD=#1 10'1100100011 ;

594.    10'd 586 :RD=#1 10'1100100000 ;

595.    10'd 587 :RD=#1 10'1100011110 ;

596.    10'd 588 :RD=#1 10'1100011011 ;

597.    10'd 589 :RD=#1 10'1100011000 ;

598.    10'd 590 :RD=#1 10'1100010101 ;

599.    10'd 591 :RD=#1 10'1100010010 ;

600.    10'd 592 :RD=#1 10'1100010000 ;

601.    10'd 593 :RD=#1 10'1100001101 ;

602.    10'd 594 :RD=#1 10'1100001010 ;

603.    10'd 595 :RD=#1 10'1100000111 ;

604.    10'd 596 :RD=#1 10'1100000101 ;

605.    10'd 597 :RD=#1 10'1100000010 ;

606.    10'd 598 :RD=#1 10'1011111111 ;

607.    10'd 599 :RD=#1 10'1011111100 ;

608.    10'd 600 :RD=#1 10'1011111010 ;

609.    10'd 601 :RD=#1 10'1011110111 ;

610.    10'd 602 :RD=#1 10'1011110100 ;

611.    10'd 603 :RD=#1 10'1011110010 ;

612.    10'd 604 :RD=#1 10'1011101111 ;

613.    10'd 605 :RD=#1 10'1011101100 ;

614.    10'd 606 :RD=#1 10'1011101010 ;

615.    10'd 607 :RD=#1 10'1011100111 ;

616.    10'd 608 :RD=#1 10'1011100101 ;

617.    10'd 609 :RD=#1 10'1011100010 ;

618.    10'd 610 :RD=#1 10'1011011111 ;

619.    10'd 611 :RD=#1 10'1011011101 ;

620.    10'd 612 :RD=#1 10'1011011010 ;

621.    10'd 613 :RD=#1 10'1011011000 ;

622.    10'd 614 :RD=#1 10'1011010101 ;

623.    10'd 615 :RD=#1 10'1011010011 ;

624.    10'd 616 :RD=#1 10'1011010000 ;

625.    10'd 617 :RD=#1 10'1011001110 ;

626.    10'd 618 :RD=#1 10'1011001011 ;

627.    10'd 619 :RD=#1 10'1011001001 ;

628.    10'd 620 :RD=#1 10'1011000110 ;

629.    10'd 621 :RD=#1 10'1011000100 ;

630.    10'd 622 :RD=#1 10'1011000001 ;

631.    10'd 623 :RD=#1 10'1010111111 ;

632.    10'd 624 :RD=#1 10'1010111100 ;

633.    10'd 625 :RD=#1 10'1010111010 ;

634.    10'd 626 :RD=#1 10'1010111000 ;

635.    10'd 627 :RD=#1 10'1010110101 ;

636.    10'd 628 :RD=#1 10'1010110011 ;

637.    10'd 629 :RD=#1 10'1010110000 ;

638.    10'd 630 :RD=#1 10'1010101110 ;

639.    10'd 631 :RD=#1 10'1010101100 ;

640.    10'd 632 :RD=#1 10'1010101001 ;

641.    10'd 633 :RD=#1 10'1010100111 ;

642.    10'd 634 :RD=#1 10'1010100101 ;

643.    10'd 635 :RD=#1 10'1010100010 ;

644.    10'd 636 :RD=#1 10'1010100000 ;

645.    10'd 637 :RD=#1 10'1010011110 ;

646.    10'd 638 :RD=#1 10'1010011100 ;

647.    10'd 639 :RD=#1 10'1010011001 ;

648.    10'd 640 :RD=#1 10'1010010111 ;

649.    10'd 641 :RD=#1 10'1010010101 ;

650.    10'd 642 :RD=#1 10'1010010011 ;

651.    10'd 643 :RD=#1 10'1010010001 ;

652.    10'd 644 :RD=#1 10'1010001110 ;

653.    10'd 645 :RD=#1 10'1010001100 ;

654.    10'd 646 :RD=#1 10'1010001010 ;

655.    10'd 647 :RD=#1 10'1010001000 ;

656.    10'd 648 :RD=#1 10'1010000110 ;

657.    10'd 649 :RD=#1 10'1010000100 ;

658.    10'd 650 :RD=#1 10'1010000010 ;

659.    10'd 651 :RD=#1 10'1010000000 ;

660.    10'd 652 :RD=#1 10'1001111110 ;

661.    10'd 653 :RD=#1 10'1001111100 ;

662.    10'd 654 :RD=#1 10'1001111001 ;

663.    10'd 655 :RD=#1 10'1001110111 ;

664.    10'd 656 :RD=#1 10'1001110101 ;

665.    10'd 657 :RD=#1 10'1001110100 ;

666.    10'd 658 :RD=#1 10'1001110010 ;

667.    10'd 659 :RD=#1 10'1001110000 ;

668.    10'd 660 :RD=#1 10'1001101110 ;

669.    10'd 661 :RD=#1 10'1001101100 ;

670.    10'd 662 :RD=#1 10'1001101010 ;

671.    10'd 663 :RD=#1 10'1001101000 ;

672.    10'd 664 :RD=#1 10'1001100110 ;

673.    10'd 665 :RD=#1 10'1001100100 ;

674.    10'd 666 :RD=#1 10'1001100010 ;

675.    10'd 667 :RD=#1 10'1001100001 ;

676.    10'd 668 :RD=#1 10'1001011111 ;

677.    10'd 669 :RD=#1 10'1001011101 ;

678.    10'd 670 :RD=#1 10'1001011011 ;

679.    10'd 671 :RD=#1 10'1001011001 ;

680.    10'd 672 :RD=#1 10'1001011000 ;

681.    10'd 673 :RD=#1 10'1001010110 ;

682.    10'd 674 :RD=#1 10'1001010100 ;

683.    10'd 675 :RD=#1 10'1001010010 ;

684.    10'd 676 :RD=#1 10'1001010001 ;

685.    10'd 677 :RD=#1 10'1001001111 ;

686.    10'd 678 :RD=#1 10'1001001101 ;

687.    10'd 679 :RD=#1 10'1001001100 ;

688.    10'd 680 :RD=#1 10'1001001010 ;

689.    10'd 681 :RD=#1 10'1001001001 ;

690.    10'd 682 :RD=#1 10'1001000111 ;

691.    10'd 683 :RD=#1 10'1001000101 ;

692.    10'd 684 :RD=#1 10'1001000100 ;

693.    10'd 685 :RD=#1 10'1001000010 ;

694.    10'd 686 :RD=#1 10'1001000001 ;

695.    10'd 687 :RD=#1 10'1000111111 ;

696.    10'd 688 :RD=#1 10'1000111110 ;

697.    10'd 689 :RD=#1 10'1000111100 ;

698.    10'd 690 :RD=#1 10'1000111011 ;

699.    10'd 691 :RD=#1 10'1000111001 ;

700.    10'd 692 :RD=#1 10'1000111000 ;

701.    10'd 693 :RD=#1 10'1000110111 ;

702.    10'd 694 :RD=#1 10'1000110101 ;

703.    10'd 695 :RD=#1 10'1000110100 ;

704.    10'd 696 :RD=#1 10'1000110011 ;

705.    10'd 697 :RD=#1 10'1000110001 ;

706.    10'd 698 :RD=#1 10'1000110000 ;

707.    10'd 699 :RD=#1 10'1000101111 ;

708.    10'd 700 :RD=#1 10'1000101101 ;

709.    10'd 701 :RD=#1 10'1000101100 ;

710.    10'd 702 :RD=#1 10'1000101011 ;

711.    10'd 703 :RD=#1 10'1000101010 ;

712.    10'd 704 :RD=#1 10'1000101000 ;

713.    10'd 705 :RD=#1 10'1000100111 ;

714.    10'd 706 :RD=#1 10'1000100110 ;

715.    10'd 707 :RD=#1 10'1000100101 ;

716.    10'd 708 :RD=#1 10'1000100100 ;

717.    10'd 709 :RD=#1 10'1000100011 ;

718.    10'd 710 :RD=#1 10'1000100010 ;

719.    10'd 711 :RD=#1 10'1000100000 ;

720.    10'd 712 :RD=#1 10'1000011111 ;

721.    10'd 713 :RD=#1 10'1000011110 ;

722.    10'd 714 :RD=#1 10'1000011101 ;

723.    10'd 715 :RD=#1 10'1000011100 ;

724.    10'd 716 :RD=#1 10'1000011011 ;

725.    10'd 717 :RD=#1 10'1000011010 ;

726.    10'd 718 :RD=#1 10'1000011001 ;

727.    10'd 719 :RD=#1 10'1000011000 ;

728.    10'd 720 :RD=#1 10'1000011000 ;

729.    10'd 721 :RD=#1 10'1000010111 ;

730.    10'd 722 :RD=#1 10'1000010110 ;

731.    10'd 723 :RD=#1 10'1000010101 ;

732.    10'd 724 :RD=#1 10'1000010100 ;

733.    10'd 725 :RD=#1 10'1000010011 ;

734.    10'd 726 :RD=#1 10'1000010010 ;

735.    10'd 727 :RD=#1 10'1000010010 ;

736.    10'd 728 :RD=#1 10'1000010001 ;

737.    10'd 729 :RD=#1 10'1000010000 ;

738.    10'd 730 :RD=#1 10'1000001111 ;

739.    10'd 731 :RD=#1 10'1000001111 ;

740.    10'd 732 :RD=#1 10'1000001110 ;

741.    10'd 733 :RD=#1 10'1000001101 ;

742.    10'd 734 :RD=#1 10'1000001101 ;

743.    10'd 735 :RD=#1 10'1000001100 ;

744.    10'd 736 :RD=#1 10'1000001011 ;

745.    10'd 737 :RD=#1 10'1000001011 ;

746.    10'd 738 :RD=#1 10'1000001010 ;

747.    10'd 739 :RD=#1 10'1000001010 ;

748.    10'd 740 :RD=#1 10'1000001001 ;

749.    10'd 741 :RD=#1 10'1000001000 ;

750.    10'd 742 :RD=#1 10'1000001000 ;

751.    10'd 743 :RD=#1 10'1000001000 ;

752.    10'd 744 :RD=#1 10'1000000111 ;

753.    10'd 745 :RD=#1 10'1000000111 ;

754.    10'd 746 :RD=#1 10'1000000110 ;

755.    10'd 747 :RD=#1 10'1000000110 ;

756.    10'd 748 :RD=#1 10'1000000101 ;

757.    10'd 749 :RD=#1 10'1000000101 ;

758.    10'd 750 :RD=#1 10'1000000101 ;

759.    10'd 751 :RD=#1 10'1000000100 ;

760.    10'd 752 :RD=#1 10'1000000100 ;

761.    10'd 753 :RD=#1 10'1000000100 ;

762.    10'd 754 :RD=#1 10'1000000011 ;

763.    10'd 755 :RD=#1 10'1000000011 ;

764.    10'd 756 :RD=#1 10'1000000011 ;

765.    10'd 757 :RD=#1 10'1000000011 ;

766.    10'd 758 :RD=#1 10'1000000010 ;

767.    10'd 759 :RD=#1 10'1000000010 ;

768.    10'd 760 :RD=#1 10'1000000010 ;

769.    10'd 761 :RD=#1 10'1000000010 ;

770.    10'd 762 :RD=#1 10'1000000010 ;

771.    10'd 763 :RD=#1 10'1000000010 ;

772.    10'd 764 :RD=#1 10'1000000010 ;

773.    10'd 765 :RD=#1 10'1000000010 ;

774.    10'd 766 :RD=#1 10'1000000010 ;

775.    10'd 767 :RD=#1 10'1000000010 ;

776.    10'd 768 :RD=#1 10'1000000001 ;

777.    10'd 769 :RD=#1 10'1000000010 ;

778.    10'd 770 :RD=#1 10'1000000010 ;

779.    10'd 771 :RD=#1 10'1000000010 ;

780.    10'd 772 :RD=#1 10'1000000010 ;

781.    10'd 773 :RD=#1 10'1000000010 ;

782.    10'd 774 :RD=#1 10'1000000010 ;

783.    10'd 775 :RD=#1 10'1000000010 ;

784.    10'd 776 :RD=#1 10'1000000010 ;

785.    10'd 777 :RD=#1 10'1000000010 ;

786.    10'd 778 :RD=#1 10'1000000010 ;

787.    10'd 779 :RD=#1 10'1000000011 ;

788.    10'd 780 :RD=#1 10'1000000011 ;

789.    10'd 781 :RD=#1 10'1000000011 ;

790.    10'd 782 :RD=#1 10'1000000011 ;

791.    10'd 783 :RD=#1 10'1000000100 ;

792.    10'd 784 :RD=#1 10'1000000100 ;

793.    10'd 785 :RD=#1 10'1000000100 ;

794.    10'd 786 :RD=#1 10'1000000101 ;

795.    10'd 787 :RD=#1 10'1000000101 ;

796.    10'd 788 :RD=#1 10'1000000101 ;

797.    10'd 789 :RD=#1 10'1000000110 ;

798.    10'd 790 :RD=#1 10'1000000110 ;

799.    10'd 791 :RD=#1 10'1000000111 ;

800.    10'd 792 :RD=#1 10'1000000111 ;

801.    10'd 793 :RD=#1 10'1000001000 ;

802.    10'd 794 :RD=#1 10'1000001000 ;

803.    10'd 795 :RD=#1 10'1000001000 ;

804.    10'd 796 :RD=#1 10'1000001001 ;

805.    10'd 797 :RD=#1 10'1000001010 ;

806.    10'd 798 :RD=#1 10'1000001010 ;

807.    10'd 799 :RD=#1 10'1000001011 ;

808.    10'd 800 :RD=#1 10'1000001011 ;

809.    10'd 801 :RD=#1 10'1000001100 ;

810.    10'd 802 :RD=#1 10'1000001101 ;

811.    10'd 803 :RD=#1 10'1000001101 ;

812.    10'd 804 :RD=#1 10'1000001110 ;

813.    10'd 805 :RD=#1 10'1000001111 ;

814.    10'd 806 :RD=#1 10'1000001111 ;

815.    10'd 807 :RD=#1 10'1000010000 ;

816.    10'd 808 :RD=#1 10'1000010001 ;

817.    10'd 809 :RD=#1 10'1000010010 ;

818.    10'd 810 :RD=#1 10'1000010010 ;

819.    10'd 811 :RD=#1 10'1000010011 ;

820.    10'd 812 :RD=#1 10'1000010100 ;

821.    10'd 813 :RD=#1 10'1000010101 ;

822.    10'd 814 :RD=#1 10'1000010110 ;

823.    10'd 815 :RD=#1 10'1000010111 ;

824.    10'd 816 :RD=#1 10'1000011000 ;

825.    10'd 817 :RD=#1 10'1000011000 ;

826.    10'd 818 :RD=#1 10'1000011001 ;

827.    10'd 819 :RD=#1 10'1000011010 ;

828.    10'd 820 :RD=#1 10'1000011011 ;

829.    10'd 821 :RD=#1 10'1000011100 ;

830.    10'd 822 :RD=#1 10'1000011101 ;

831.    10'd 823 :RD=#1 10'1000011110 ;

832.    10'd 824 :RD=#1 10'1000011111 ;

833.    10'd 825 :RD=#1 10'1000100000 ;

834.    10'd 826 :RD=#1 10'1000100010 ;

835.    10'd 827 :RD=#1 10'1000100011 ;

836.    10'd 828 :RD=#1 10'1000100100 ;

837.    10'd 829 :RD=#1 10'1000100101 ;

838.    10'd 830 :RD=#1 10'1000100110 ;

839.    10'd 831 :RD=#1 10'1000100111 ;

840.    10'd 832 :RD=#1 10'1000101000 ;

841.    10'd 833 :RD=#1 10'1000101010 ;

842.    10'd 834 :RD=#1 10'1000101011 ;

843.    10'd 835 :RD=#1 10'1000101100 ;

844.    10'd 836 :RD=#1 10'1000101101 ;

845.    10'd 837 :RD=#1 10'1000101111 ;

846.    10'd 838 :RD=#1 10'1000110000 ;

847.    10'd 839 :RD=#1 10'1000110001 ;

848.    10'd 840 :RD=#1 10'1000110011 ;

849.    10'd 841 :RD=#1 10'1000110100 ;

850.    10'd 842 :RD=#1 10'1000110101 ;

851.    10'd 843 :RD=#1 10'1000110111 ;

852.    10'd 844 :RD=#1 10'1000111000 ;

853.    10'd 845 :RD=#1 10'1000111001 ;

854.    10'd 846 :RD=#1 10'1000111011 ;

855.    10'd 847 :RD=#1 10'1000111100 ;

856.    10'd 848 :RD=#1 10'1000111110 ;

857.    10'd 849 :RD=#1 10'1000111111 ;

858.    10'd 850 :RD=#1 10'1001000001 ;

859.    10'd 851 :RD=#1 10'1001000010 ;

860.    10'd 852 :RD=#1 10'1001000100 ;

861.    10'd 853 :RD=#1 10'1001000101 ;

862.    10'd 854 :RD=#1 10'1001000111 ;

863.    10'd 855 :RD=#1 10'1001001001 ;

864.    10'd 856 :RD=#1 10'1001001010 ;

865.    10'd 857 :RD=#1 10'1001001100 ;

866.    10'd 858 :RD=#1 10'1001001101 ;

867.    10'd 859 :RD=#1 10'1001001111 ;

868.    10'd 860 :RD=#1 10'1001010001 ;

869.    10'd 861 :RD=#1 10'1001010010 ;

870.    10'd 862 :RD=#1 10'1001010100 ;

871.    10'd 863 :RD=#1 10'1001010110 ;

872.    10'd 864 :RD=#1 10'1001011000 ;

873.    10'd 865 :RD=#1 10'1001011001 ;

874.    10'd 866 :RD=#1 10'1001011011 ;

875.    10'd 867 :RD=#1 10'1001011101 ;

876.    10'd 868 :RD=#1 10'1001011111 ;

877.    10'd 869 :RD=#1 10'1001100001 ;

878.    10'd 870 :RD=#1 10'1001100010 ;

879.    10'd 871 :RD=#1 10'1001100100 ;

880.    10'd 872 :RD=#1 10'1001100110 ;

881.    10'd 873 :RD=#1 10'1001101000 ;

882.    10'd 874 :RD=#1 10'1001101010 ;

883.    10'd 875 :RD=#1 10'1001101100 ;

884.    10'd 876 :RD=#1 10'1001101110 ;

885.    10'd 877 :RD=#1 10'1001110000 ;

886.    10'd 878 :RD=#1 10'1001110010 ;

887.    10'd 879 :RD=#1 10'1001110100 ;

888.    10'd 880 :RD=#1 10'1001110101 ;

889.    10'd 881 :RD=#1 10'1001110111 ;

890.    10'd 882 :RD=#1 10'1001111001 ;

891.    10'd 883 :RD=#1 10'1001111100 ;

892.    10'd 884 :RD=#1 10'1001111110 ;

893.    10'd 885 :RD=#1 10'1010000000 ;

894.    10'd 886 :RD=#1 10'1010000010 ;

895.    10'd 887 :RD=#1 10'1010000100 ;

896.    10'd 888 :RD=#1 10'1010000110 ;

897.    10'd 889 :RD=#1 10'1010001000 ;

898.    10'd 890 :RD=#1 10'1010001010 ;

899.    10'd 891 :RD=#1 10'1010001100 ;

900.    10'd 892 :RD=#1 10'1010001110 ;

901.    10'd 893 :RD=#1 10'1010010001 ;

902.    10'd 894 :RD=#1 10'1010010011 ;

903.    10'd 895 :RD=#1 10'1010010101 ;

904.    10'd 896 :RD=#1 10'1010010111 ;

905.    10'd 897 :RD=#1 10'1010011001 ;

906.    10'd 898 :RD=#1 10'1010011100 ;

907.    10'd 899 :RD=#1 10'1010011110 ;

908.    10'd 900 :RD=#1 10'1010100000 ;

909.    10'd 901 :RD=#1 10'1010100010 ;

910.    10'd 902 :RD=#1 10'1010100101 ;

911.    10'd 903 :RD=#1 10'1010100111 ;

912.    10'd 904 :RD=#1 10'1010101001 ;

913.    10'd 905 :RD=#1 10'1010101100 ;

914.    10'd 906 :RD=#1 10'1010101110 ;

915.    10'd 907 :RD=#1 10'1010110000 ;

916.    10'd 908 :RD=#1 10'1010110011 ;

917.    10'd 909 :RD=#1 10'1010110101 ;

918.    10'd 910 :RD=#1 10'1010111000 ;

919.    10'd 911 :RD=#1 10'1010111010 ;

920.    10'd 912 :RD=#1 10'1010111100 ;

921.    10'd 913 :RD=#1 10'1010111111 ;

922.    10'd 914 :RD=#1 10'1011000001 ;

923.    10'd 915 :RD=#1 10'1011000100 ;

924.    10'd 916 :RD=#1 10'1011000110 ;

925.    10'd 917 :RD=#1 10'1011001001 ;

926.    10'd 918 :RD=#1 10'1011001011 ;

927.    10'd 919 :RD=#1 10'1011001110 ;

928.    10'd 920 :RD=#1 10'1011010000 ;

929.    10'd 921 :RD=#1 10'1011010011 ;

930.    10'd 922 :RD=#1 10'1011010101 ;

931.    10'd 923 :RD=#1 10'1011011000 ;

932.    10'd 924 :RD=#1 10'1011011010 ;

933.    10'd 925 :RD=#1 10'1011011101 ;

934.    10'd 926 :RD=#1 10'1011011111 ;

935.    10'd 927 :RD=#1 10'1011100010 ;

936.    10'd 928 :RD=#1 10'1011100101 ;

937.    10'd 929 :RD=#1 10'1011100111 ;

938.    10'd 930 :RD=#1 10'1011101010 ;

939.    10'd 931 :RD=#1 10'1011101100 ;

940.    10'd 932 :RD=#1 10'1011101111 ;

941.    10'd 933 :RD=#1 10'1011110010 ;

942.    10'd 934 :RD=#1 10'1011110100 ;

943.    10'd 935 :RD=#1 10'1011110111 ;

944.    10'd 936 :RD=#1 10'1011111010 ;

945.    10'd 937 :RD=#1 10'1011111100 ;

946.    10'd 938 :RD=#1 10'1011111111 ;

947.    10'd 939 :RD=#1 10'1100000010 ;

948.    10'd 940 :RD=#1 10'1100000101 ;

949.    10'd 941 :RD=#1 10'1100000111 ;

950.    10'd 942 :RD=#1 10'1100001010 ;

951.    10'd 943 :RD=#1 10'1100001101 ;

952.    10'd 944 :RD=#1 10'1100010000 ;

953.    10'd 945 :RD=#1 10'1100010010 ;

954.    10'd 946 :RD=#1 10'1100010101 ;

955.    10'd 947 :RD=#1 10'1100011000 ;

956.    10'd 948 :RD=#1 10'1100011011 ;

957.    10'd 949 :RD=#1 10'1100011110 ;

958.    10'd 950 :RD=#1 10'1100100000 ;

959.    10'd 951 :RD=#1 10'1100100011 ;

960.    10'd 952 :RD=#1 10'1100100110 ;

961.    10'd 953 :RD=#1 10'1100101001 ;

962.    10'd 954 :RD=#1 10'1100101100 ;

963.    10'd 955 :RD=#1 10'1100101111 ;

964.    10'd 956 :RD=#1 10'1100110001 ;

965.    10'd 957 :RD=#1 10'1100110100 ;

966.    10'd 958 :RD=#1 10'1100110111 ;

967.    10'd 959 :RD=#1 10'1100111010 ;

968.    10'd 960 :RD=#1 10'1100111101 ;

969.    10'd 961 :RD=#1 10'1101000000 ;

970.    10'd 962 :RD=#1 10'1101000011 ;

971.    10'd 963 :RD=#1 10'1101000110 ;

972.    10'd 964 :RD=#1 10'1101001001 ;

973.    10'd 965 :RD=#1 10'1101001100 ;

974.    10'd 966 :RD=#1 10'1101001110 ;

975.    10'd 967 :RD=#1 10'1101010001 ;

976.    10'd 968 :RD=#1 10'1101010100 ;

977.    10'd 969 :RD=#1 10'1101010111 ;

978.    10'd 970 :RD=#1 10'1101011010 ;

979.    10'd 971 :RD=#1 10'1101011101 ;

980.    10'd 972 :RD=#1 10'1101100000 ;

981.    10'd 973 :RD=#1 10'1101100011 ;

982.    10'd 974 :RD=#1 10'1101100110 ;

983.    10'd 975 :RD=#1 10'1101101001 ;

984.    10'd 976 :RD=#1 10'1101101100 ;

985.    10'd 977 :RD=#1 10'1101101111 ;

986.    10'd 978 :RD=#1 10'1101110010 ;

987.    10'd 979 :RD=#1 10'1101110101 ;

988.    10'd 980 :RD=#1 10'1101111000 ;

989.    10'd 981 :RD=#1 10'1101111011 ;

990.    10'd 982 :RD=#1 10'1101111110 ;

991.    10'd 983 :RD=#1 10'1110000001 ;

992.    10'd 984 :RD=#1 10'1110000100 ;

993.    10'd 985 :RD=#1 10'1110000111 ;

994.    10'd 986 :RD=#1 10'1110001010 ;

995.    10'd 987 :RD=#1 10'1110001101 ;

996.    10'd 988 :RD=#1 10'1110010001 ;

997.    10'd 989 :RD=#1 10'1110010100 ;

998.    10'd 990 :RD=#1 10'1110010111 ;

999.    10'd 991 :RD=#1 10'1110011010 ;

1000.   10'd 992 :RD=#1 10'1110011101 ;

1001.   10'd 993 :RD=#1 10'1110100000 ;

1002.   10'd 994 :RD=#1 10'1110100011 ;

1003.   10'd 995 :RD=#1 10'1110100110 ;

1004.   10'd 996 :RD=#1 10'1110101001 ;

1005.   10'd 997 :RD=#1 10'1110101100 ;

1006.   10'd 998 :RD=#1 10'1110101111 ;

1007.   10'd 999 :RD=#1 10'1110110010 ;

1008.   10'd 1000 :RD=#1 10'1110110110 ;

1009.   10'd 1001 :RD=#1 10'1110111001 ;

1010.   10'd 1002 :RD=#1 10'1110111100 ;

1011.   10'd 1003 :RD=#1 10'1110111111 ;

1012.   10'd 1004 :RD=#1 10'1111000010 ;

1013.   10'd 1005 :RD=#1 10'1111000101 ;

1014.   10'd 1006 :RD=#1 10'1111001000 ;

1015.   10'd 1007 :RD=#1 10'1111001011 ;

1016.   10'd 1008 :RD=#1 10'1111001110 ;

1017.   10'd 1009 :RD=#1 10'1111010010 ;

1018.   10'd 1010 :RD=#1 10'1111010101 ;

1019.   10'd 1011 :RD=#1 10'1111011000 ;

1020.   10'd 1012 :RD=#1 10'1111011011 ;

1021.   10'd 1013 :RD=#1 10'1111011110 ;

1022.   10'd 1014 :RD=#1 10'1111100001 ;

1023.   10'd 1015 :RD=#1 10'1111100100 ;

1024.   10'd 1016 :RD=#1 10'1111100111 ;

1025.   10'd 1017 :RD=#1 10'1111101011 ;

1026.   10'd 1018 :RD=#1 10'1111101110 ;

1027.   10'd 1019 :RD=#1 10'1111110001 ;

1028.   10'd 1020 :RD=#1 10'1111110100 ;

1029.   10'd 1021 :RD=#1 10'1111110111 ;

1030.   10'd 1022 :RD=#1 10'1111111010 ;

1031.   10'd 1023 :RD=#1 10'1111111101 ;

1032.   default: RD=#1 0;

1033.   endcase

1034.   endmodule

6.3.3 增量计数器模块

1.  module cnt_incr(

2.      input clk,

3.      input[9:0] INCR,

4.      output reg[9:0]CNTVAL

5.  );

6.  always @(posedge clk)

7.  begin

8.      CNTVAL<=INCR+CNTVAL;

9.  end

10. endmodule

6.4 bdf文件

图6- 1 DDS的bdf图

6.5 RTL

图6- 2 顶层RTL图

图6- 3 增量计数器RTL图

图6- 4 ROM RTL图

从图6-4可以看出,ROM实际是由SYNC_RAM实现,这是一种能够初始化的同步RAM。RAM的输入接口,除了读地址信号有效,使能信号、时钟信号等均置零。RAM后接了一个D触发器。

6.6 RAM对应technical map view

·         Tech Map View 中是真正使用的资源

·         注意其中的RAM输出是不带D触发器的

·         反而是输入地址上带有D触发器。

·         注意理解时序等效的电路结构,这一要点

图6- 5 ROM Tech Map View

6.7 signaltap

图6- 6 DDS signaltap波形

如图6-6所示,增量为3时,输入正弦波频率为

                                             (6-2)

你可能感兴趣的:(FPGA 电路开发入门实验)