【FPGA】Verilog编写2FSK第④步将7位数组转化为单位脉冲输出
- 在信号连接的时候经常遇到输入是数组但是输出要求单位脉冲信号,结合前几节信号的调制和产生办法,本节主要处理问题为:将7位数组转化为单位脉冲输出。
-编写转化模块(详解看注释)
module trans(clk,canshu,MC);//定义模块名称
input clk;//clk输入时钟
input [6:0]canshu;//canshu输入的7位数组
output MC;//MC输出的单位脉冲
reg MC=0;//初始化输出脉冲值
reg [10:0]i=11'b0;//初始化时钟计数参数
reg [2:0] m=3'b000;//定义初始数组地址位
always@(posedge clk)//时钟上升沿触发
begin
if(i==11'b11111111111)//设置输出脉冲宽度这里设置的1023个时钟周期
begin i<=0; //将时钟计数参数置0
case(m)//通过数组地址位选择输出顺序,这里选择从高位输出即从左到右
3'b000:MC<=canshu[6];
3'b001:MC<=canshu[5];
3'b010:MC<=canshu[4];
3'b011:MC<=canshu[3];
3'b100:MC<=canshu[2];
3'b101:MC<=canshu[1];
3'b110:MC<=canshu[0];
endcase
if(m==3'b110)m<=3'b000 ;//如果地址位到达上限置0
else m<=m+3'b001; //将地址位加1
end
else i=i+1;//对时钟计数参数加1
end
endmodule
- 编写测试模块
注:这里没有编写顶层模块,是因为本节只对数组转化进行讨论,因此只有一个子模块,可将这个子模块设置为顶层,具体设置办法在第②节中有讲解。
`timescale 1ms/1ms//1m步进
module trans_tb;//定义tb模块名称
reg clk;//定义时钟
reg [6:0]canshu=7'b1101001;//给数组赋值七位二进制
wire MC;
trans trans
(
.clk(clk),
.canshu(canshu),
.MC(MC)
);
initial clk=1;
always #5 clk=~clk;//产生时钟信号
endmodule
- 添加测试文件开始仿真,仿真结果如下
注:注意数组输出顺序,是从高位到低位还是低位到高位。该模块为调制模块和M序列生成模块的连接模块。即可将M序列产生的多位数据进行单位输出给调制模块进行调制。
【FPGA】使用Verilog编程通过ModelSim实现2FSK调制解调仿真①( MATLAB生成.mif文件)
【FPGA】使用Verilog编程通过ModelSim实现2FSK调制解调仿真②(调用.mif生成2FSK载波波形——DDS)
【FPGA】使用Verilog编程通过ModelSim实现2FSK调制解调仿真③(信号调制仿真)
将7位数组转化为单位脉冲输出压缩程序