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

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

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

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
    下载

相关推荐