• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于FPGA的密勒码编译码器设计Verilog代码VIVADO仿真

08/01 15:24
868
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24060G24350239.doc

共1个文件

名称:基于FPGA的密勒码编译码器设计Verilog代码VIVADO仿真

软件:VIVADO

语言:Verilog

代码功能:

1.?编码器(代码在工程文件中)

module miller_encoder(

signal_in,

signal_out,

clk,

o_start,

o_finish

);

//输入输出端口声明

input signal_in;

input clk;

output reg signal_out;???//编码串行输出数据

output reg o_start;?? ?//编码数据开始输出指示

output reg o_finish;???//编码数据输出完毕指示

2.?译码器(代码在工程文件中)

module miller_decoder(

signal_in,

signal_out,

clk,

o_start,

o_finish

);

//输入输出端口声明

input signal_in;?? ?//串行输入信号

input clk;

output reg signal_out;???//解码串行输出数据

output reg o_start;?? ?//解码数据开始输出指示

output reg o_finish;???//解码数据输出完毕指示

一、?仿真验证

1.?编码器仿真验证

//miller_encoder程序的测试程序

`timescale 10ns/1ns

module miller_encoder_tb;

//主要输入寄存器

reg clk;

reg clk2;

reg signal_in;

//主要输出声明

wire signal_out;

wire o_start;

wire o_finish;

reg temp;

reg [7:0] shift;

//待测试设计例化

miller_encoder my_miller_encoder(signal_in,signal_out,clk,o_start,o_finish);

//产生时钟周期是100个时间单位

always #50 clk=~clk;

always @(posedge clk)

begin

clk2<=~clk2;

end

//设计一个或多个激励信号发生器

initial

begin

clk=0;

clk2=0;

shift=16'b01001011;//信码是11010010

signal_in=shift[0];

temp=shift[0];

shift=shift>>1;

shift[7]=temp;

end

always @(posedge clk2)//注意这里是clk2时钟来控制输入数据一位一位往里进哟

begin

signal_in=shift[0];

temp=shift[0];

shift=shift>>1;

shift[7]=temp;

end

//检测输出信号

initial

begin

$monitor($time,"signal_out=%b o_start=%b o_finish= %b",signal_out,o_start,o_finish);

#8000 $finish;

end

endmodule

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

密勒码编解码

1.工程文件

2.编码程序文件

3.编码程序测试文件

4.编码程序仿真

5.译码程序文件

6.译码程序测试文件

7.译码程序仿真

部分代码展示:

module?miller_decoder(
signal_in,
signal_out,
clk,
o_start,
o_finish
);
//输入输出端口声明
input?signal_in;//串行输入信号
input?clk;
output?reg?signal_out;//解码串行输出数据
output?reg?o_start;//解码数据开始输出指示
output?reg?o_finish;//解码数据输出完毕指示
//内部变量声明
reg?[16:1]?datain_parallel=0;//待解码数据转并行暂存
reg?[8:1]??outbuf_parallel=0;//解码后输出并行数据暂存
reg?[4:0]?count=0;
reg?d_finish=0;//数据输入完毕指示
reg?c_finish=0;//解码完毕指示
reg?clk2=0;//分频时钟
integer?i,j,k=8;
//本进程用来串并转换
always?@?(posedge?clk)//解码的时候是输入比输出多,所以输入用未分频的时钟,输出用分频了的
begin??
count=count+1;
if(count==17)
begin
count<=16;
d_finish<=1;//16bit数据输入完毕啦可以开始解码了喵
end
else
begin?
datain_parallel<={datain_parallel[15:1],signal_in};
end
end
//本进程用来产生2分频
always?@?(posedge?clk)
begin??
clk2<=~clk2;
end
//本进程用来并串转换
always?@?(posedge?clk2)
begin??
if(c_finish==1)//解码完毕,可以输出鸟
begin
o_start=1;
signal_out<=outbuf_parallel[k];
k<=k-1;
if(k==0)//数据输出完毕?
begin
o_finish=1;
signal_out<=0;
end
end

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=839

  • 2-24060G24350239.doc
    下载

相关推荐