打印

大神帮忙看看测帧同步的程序

[复制链接]
1000|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
修炼人生|  楼主 | 2017-5-3 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
输入数据data为8 bit并行数据流,基本结构为数据帧,帧长为10字节,帧同步字为H“FF”。clk为输入同步时钟。
1、搜索出数据流中的帧同步字信号,并给出帧同步标志。
2、系统工作开始后,要连续3次确认帧同步字进入锁定状态后才输出帧同步标志。
3、在锁定状态时,如连续出现3次错误的帧同步字,则帧同步标志输出无效,系统重新进入搜索状态;否则继续输出有效的帧同步标志。
主程序
module test(clk,data,flag);
output reg flag;
input clk;
input[7:0] data;
parameter s0 = 3'b000,s1 = 3'b001,s2 = 3'b010,s3 = 3'b011,s4 = 3'b100, s5 = 3'b101,s6 = 3'b110,s7 = 3'b111;
parameter FF = 8'hFF;
reg[2:0] state,next_state;
reg[7:0] data_1,data_2;
reg i;
always @(posedge clk)
begin
data_2<=data;
end            
always @ (posedge clk)
state<= next_state;
always @ (posedge clk)
case(state)
s0:
if(data_1== FF)
next_state<= s1;
else
next_state<= s2;
s1:
if(data_1== FF)
next_state<= s3;
else
next_state<= s2;
s2:begin
next_state<= s0;
end
s3:
if(data_1== FF)
next_state<= s4;
else
next_state<= s2;
s4:
if(data_1== FF)
next_state<= s4;
else
next_state<= s5;
s5:
if(data_1== FF)
next_state<= s4;
else
next_state<= s6;
s6:
if(data_1== FF)
next_state<= s4;
else
next_state<= s7;
s7:
if(data_1== FF)
next_state<= s1;
else
next_state<= s2;
default:
next_state<= s0;
endcase

always @ (posedge clk)
case(state)
s0:
begin
i<= 0;
data_1<= data_2;
flag<= 0;
end
s1:
begin
i<= i + 10;
data_1<= data_2;
flag<= 0;
end
s2:
begin
i<= i + 1;
data_1<= data_2;
flag<= 0;
end
s3:
begin
i<= i + 10;
data_1= data_2;
flag<= 0;
end
s4:
begin
i<= i + 10;
data_1<= data_2;
flag <= 1;
end
s5:
begin
i<= i + 10;
data_1<= data_2;
flag<= 1;
end
s6:
begin
i<= i + 10;
data_1<= data_2;
flag<= 1;
end
s7:
begin
i<= i + 10;
data_1<= data_2;
flag<= 0;
end
default:
begin
i<=0;
flag<=0;
end
endcase
endmodule

testbench
`timescale 1 ps/ 1 ps
module test_vlg_tst();
// constants                                          
// general purpose registers
// test vector input registers
reg[7:0] data_v[99:0];
reg clk;
reg[7:0] data;
// wires                                               
wire flag;
integer j;
// assign statements (if any)                          
test i1 (
// port map - connection between master ports and signals/registers   
        .clk(clk),
        .data(data),
        .flag(flag)
);

initial
begin
$readmemh("test.txt",data_v);
j<=0;
clk<=0;
end                                               
always #10 clk=~clk;
always @(posedge clk)
begin
data[7:0]<=data_v[j];
j<=j+1;
end                                                                                                                                                   
endmodule
输入的数据都没有,我是设置了一个800位的数据,一个时钟上升沿读8位,不知道我这种方式对不对,哪里出问题了,求大神指教啊!!!

相关帖子

沙发
修炼人生|  楼主 | 2017-5-3 17:09 | 只看该作者
波形上输入数据都没有,什么情况,明明我用$readmemh("test.txt",data_v);把数据输入到data_v中,然后data[7:0]<=data_v[j],为啥data不显示数据!!!!!

使用特权

评论回复
板凳
修炼人生|  楼主 | 2017-5-3 17:24 | 只看该作者
大神些,帮下忙呀!!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝