资源描述:
《Verilog期末实验报告—波形发生器.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、实验目的使用Verilog软件编写四种波形任意发生器的源代码,用modelsim软件进行仿真测试,进一步强化Verilog,modelsim软件的编程能力为进一步的编程学习打下良好的基础。二、实验原理2.1该任意波形发生器要实现三个功能:(1)通过计数器并结合拼接操作产生四种波形正弦波,方波,三角波1,三角波形的5位数据地址。(2).设定ROM中对应波形地址地址的8位数值,将所有波形数值存储到ROM中。(3).设定2位的波形选择开关端口。波形选择正弦波方波三角波1三角波22bit地址发生器(0-7)00000~00
2、111clk01000~011113bitdata[7:0]reset10000~1011111000~11111图1整体设计方案2.2四种波形要在一个周期内等间隔取8个点,定义对应的数据,下图为示意图,由于编程序需要,数据会进行相应的修改。8881三角波1三角波2xy00yyx1x1方波正弦波1-1图2四种波形一个周期内的取样示意图2.3四种波形数据地址对应的数据的存储器ROM根据示意图,由于实际情况需要,将正弦波平移至x轴以上,并将所有波形的峰峰值取大100倍。下表1是ROM存储器正弦波波形选择地址取样点的地址RO
3、M数据000001710000120000010171000111000010029001010001102900111方波1000100000100100101000101100110010001101100011101000111110010000三角波1010001010010331001167101001001010167101103310111三角波201100001100150110101001101115011100200111011331111067111110表1ROM存储器三、实验内容3.1任意波形
4、发生器verilog程序代码:modulewave(data,clk,add1,reset);//顶层模块端口定义output[7:0]data;inputclk,reset;input[1:0]addr1;Wire[1:0]addr1;wireclk,reset;//输入输出变量定义ADDR4(addr,clk,addr1,reset);//地址发生器模块调用rom1(addr,data);//ROM存储器模块调用endmodulemoduleADDR(addr,clk,addr1,reset);output[4:0
5、]addr;inputclk,reset;wireclk,reset;reg[2:0]addr2;wire[1:0]addr1;reg[4:0]addr;initialaddr2=3'b000;//定义计数初值always@(posedgeclkorposedgereset)//每当有clk,或reset信号开启程序beginif(reset)beginaddr2<=0;//同步复位addr<=0;endelseif(addr2>=7)//addr2计数至7时,addr2复位beginaddr2<=0;endelseb
6、eginaddr2<=addr2+1;//addr2由0至7计数addr<={addr1,addr2};//addr1与addr2地址拼接为addr的最终地址endendendmodulemodulerom(addr,data);//数据存储器模块input[4:0]addr;output[7:0]data;function[6:0]romout;//定义函数,存储32个波形取样点地址的数据input[4:0]addr;reg[4:0]addr;wire[7:0]data;case(addr)//根据不同地址,得到不同
7、数据。0:romout=171;1:romout=200;2:romout=171;3:romout=100;4:romout=29;5:romout=0;6:romout=29;7:romout=100;8:romout=0;9:romout=0;10:romout=0;11:romout=0;12:romout=100;13:romout=100;14:romout=100;15:romout=100;16:romout=0;17:romout=0;18:romout=33;19:romout=67;20:romo
8、ut=100;21:romout=67;22:romout=33;23:romout=0;24:romout=0;25:romout=50;26:romout=100;27:romout=150;28:romout=200;29:romout=133;30:romout=67;31:romout=0;default:romout=