函数发生器设计和原理

  • 格式:pdf
  • 大小:634.06 KB
  • 文档页数:7

实例学习Robei芯片设计系列 Copyright © Robei

十.函数发生器

1.实验目的

用verilog硬件编程语言编写函数发生器,并用Robei软件进行仿真分析。

2.实验原理

本次试验主要是针对递增函数、递减函数、三角波函数、阶梯函数、方波函数五个函数设计模块,并进行仿真实验。

时钟clk上升沿触发有效,reset低电平复位。

sel是函数选择端,当sel=0时,产生递增函数;当sel=1时,产生递减函数;当sel=2时,产生三角波函数;当sel=3时,产生阶梯函数;当sel=4时,产生方波函数。

3.实验内容

3.1函数发生器模型设计

1) 新建一个模型,名为fun,类型为module,具备3 输入1 输出,每个引脚的属性和名称如下图2-10-1所示。

图2-10-1 函数发生器的引脚属性 实例学习Robei芯片设计系列 Copyright © Robei

图2-10-2 函数发生器的界面图

2) 添加代码。点击模型下方的Code添加代码。

代码: reg sign;

reg [6:0]cnt;

always @(negedge reset or posedge clk)

begin

case(sel)

3'b000:

begin

if(!reset)

q<=0;

else if(q==8'b1111_1111)

q<=0;

else 实例学习Robei芯片设计系列 Copyright © Robei

q<=q+1;

end

3'b001:

if(!reset)

q<=0;

else if(q==8'b0000_0000)

q<=8'b1111_1111;

else

q<=q-1;

3'b010:

begin

if(!reset)

q<=0;

else //posedge clk

if(sign) // increment

begin

if(q==8'b1111_1110)

begin

q<=8'b1111_1111;

sign<=0;

end

else

begin

q<=q+1;

end 实例学习Robei芯片设计系列 Copyright © Robei

end

else //sign==0 ,decrement

begin

if(q==8'b0000_0001)

begin

q<=8'b0000_0000;

sign<=1;

end

else

begin

q<=q-1;

end

end

end

3'b011:

begin

if(!reset)

q<=0;

else //posedge clk

if (q==8'b1111_1111)

q<=8'b0000_0000;

else

q<=q+16; // the step is 16

end

实例学习Robei芯片设计系列 Copyright © Robei

3'b100:

begin

if(!reset)

q<=0; cnt<=0;

else //posedge clk

// increment

if (cnt<63)

cnt<=cnt+1;

else

begin

cnt<=0;

q<=~q; // the step is 16

end

end

default: q<=8'bx;

endcase

end

3) 保存模型(存储文件夹路径不能有空格和中文),运行并检查有无错误输出。

3.2 fun_test测试文件的设计

1)新建一个3输入1 输出的fun _test测试文件,记得将Module Type设置为 “testbench”,各个引脚配置如图2-10-3所示。

实例学习Robei芯片设计系列 Copyright © Robei

图2-10-3 fun_test的引脚属性

2) 另存为测试文件。将测试文件保存到上面创建的模型所在的文件夹下。

3) 添加模型。在Toolbox工具箱的Current栏里会出现模型,单击该模型并在 fun_test上添加,并连接引脚,如下图2-10-4所示:

图2-10-4 fun_test的界面图

4) 输入激励。点击测试模块下方的“Code”,输入激励算法。激励代码用 $finish 结束。 测试代码: always #2 clk=~clk; initial begin clk=0; reset=0; #2 sel=3'b000; #1 reset=1; #100 reset=0; #2 sel=3'b001; #1 reset=1; #100 reset=0; #2 sel=3'b010; #1 reset=1; #100 reset=0; #2 sel=3'b011; 实例学习Robei芯片设计系列 Copyright © Robei

#1 reset=1; #100 reset=0; #4 sel=3'b100; #1 reset=1; #100 reset=0; #2 sel=3'b111; #4 $finish; end

5)执行仿真并查看波形。查看输出信息。检查没有错误之后查看波形。点击右侧 Workspace 中的信号,进行添加并查看分析仿真结果。如图2-10-5所示:

图2-10-5

4.问题与思考

思考在本实验的基础上,设计可产生正弦波(sin_wave)、锯齿波(swat_wave)、矩形波(squr_wave)、三角波(trig_wave)四种信号的波形发生器,能够实现信号的转换并且频率可调;设计的频率计以1Hz为基准信号,测量的范围是1Hz—9999Hz,测量的结果以四位十进制的形式输出