异步数据复接设计。
孟伟荣 201222250226 空天院。
根据3个时钟的不同速率,如果最终的并行输出是同步字节+对应数据的结构,可以发现aa+两帧第一路数据+bb+三帧第二路数据+cc正好满足要求。其中aabbcc均以16进制数据表示。aa,bb,cc分别使用一个byte的寄存器。
本设计中为使结果显而易见,第一路数据全部为1,第二路数据全部为0.
数据经过串并转换之后,进入一个fifo寄存器。fifo寄存器8位宽,存27个数据。第一位固定为aa,第12位固定为bb,第28位固定为cc.
第一路和第二路数据写入使用两个指针,分别是ind_a(5’b00001~5’b01010),ind_b(5’b01100~5’b11010).数据读出使用指针ind_c(5’b00000~5’b11011).具体结构如图1所示。
图1.最终并行输出示意。
图2.顶层结构示意图。
本设计使用的是新手喜闻乐见的自顶向下设计方法,最终设计如图2所示。
模块ch1和ch2在20mhz和30mhz的时钟激励下分别产生全1和全0的输出。s_to_p_1和s_to_p_2分别将ch1和ch2的串行输出转化为并行。模块multiplexer 即复用模块,在7mhz时钟激励下做8位并行输出。
上文所述的fifo寄存器和三个指针即在此。
下附程序:module ch1
// do not remove this line!
clk_1, data_1
// do not remove this line!
/ port declaration
// do not remove this line!
input clk_1;
output data_1;
reg data_1;
// do not remove this line!
always@(posedge clk_1)begin
data_1<=1'b1;
endendmodule
module ch2
// do not remove this line!
clk_2, data_2
// do not remove this line!
/ port declaration
// do not remove this line!
input clk_2;
output data_2;
reg data_2;
// do not remove this line!
always@(posedge clk_2)begin
data_2<=1'b0;
endendmodule
module s_to_p_1
// do not remove this line!
data_a, data_a_p
// do not remove this line!
/ port declaration
// do not remove this line!
input data_a;
output data_a_p;
reg [2:0] index_a=3'b000;
reg [7:0] r1;
reg [7:0] data_a_p;
// do not remove this line!
always@(data_a)begin
if (index_a==3'b111)begin
r1[index_a]=data_a;
data_a_p[7:0]=r1[7:0];
index_a=3'b000;
endelse begin
r1[index_a]<=data_a;
index_a<=index_a+3'b001;
endend
endmodule
module s_to_p_2
// do not remove this line!
data_b, data_b_p
// do not remove this line!
/ port declaration
// do not remove this line!
input data_b;
output [7:0] data_b_p;
reg [2:0] index_b=3'b000;
reg [7:0] r2;
reg [7:0] data_b_p;
// do not remove this line!
always@(data_b)begin
if (index_b==3'b111)begin
r1[index_b]=data_b;
data_b_p[7:0]=r2[7:0];
index_b=3'b000;
endelse begin
r1[index_b]<=data_b;
index_b<=index_b+3'b001;
endend
endmodule
module multiplexer
// do not remove this line!
clk_3, data_1, data_2, data_out
// do not remove this line!
/ port declaration
// do not remove this line!
input clk_3;
input [7:0] data_1;
input [7:0] data_2;
output [7:0] data_out;
reg [7:0] multimem[0:27];
reg [4:0] ind_a;
reg [4:0] ind_b;
reg [4:0] ind_b;
reg [7:0] data_1;
reg [7:0] data_2;
reg send;
// do not remove this line!
initial begin
multimem[0]=8'b10101010;
multimem[11]=8'b10111011;
multimem[27]=8'b11001100;
ind_a=5'b00001;//ind_a start from 1 to 10
ind_b=5'b01100;//ind_b start from 12 to 26
ind_c=5'b00000;//ind_c start from 0 to27
send=1'b0;
endalways@(data_1)begin
if(ind_a==5'b01010)begin
multimem[ind_a]<=data_1[7:0];
ind_a<=5'b00001;
endelse begin
multimem[ind_a]<=data_1[7:0];
ind_a<=ind_a+1;
endend
always@(data_2)begin
if(ind_b==5'b11010)begin
multimem[ind_b]<=data_2[7:0];
ind_b<=5'b01100;
send=1;
endelse begin
multimem[ind_b]<=data_2[7:0];
ind_b<=ind_b+1;
endend
always@(posedge clk_3)begin
if (send) begin
if (ind_c==5'b11011)begin
data_out[7:0]=multimem[ind_c];
ind_c=5'b00000;
endelse begin
data_out[7:0]<=multimem[ind_c];
ind_c<=ind_c+1;
endend
endendmodule
图3.**结果。
**结果如图3所示,和图1中的预期结果基本吻合。
FPGA课程设计
黑龙江大学。fpga通信模块设计。专业 通信工程。学号 20085415 姓名 王琪。fpga通信模块设计。1 现代数字信号处理。随着电子技术和集成电路技术的飞速发展,数字信号处理已广泛应用于语音 图像处理,通信和多 等领域中。傅立叶变换 dft 作为其数字信号处理中的基本运算,发挥着重要作用。特别...
FPGA课程设计
fpga课。程。设。计。专业 10级电子信息工程。班级 1班。姓名 傅雅琦。学号 100102011120 指导教师 祝宏。制作日期 2012年12月13日。1.模为100的可加减计数器。1.标题及任务书。第一阶段 熟悉设计要求构造大致思路。第二阶段 图书馆查阅资料,仿照例子编程。第三阶段 开始编程...
FPGA课程设计
安康学院。fpga sopc课程设计报告书。设计项目成绩评定表。设计报告书目录。一 设计目的 1 二 设计思路 1 三 设计过程 1 3.1 系统总体方案 1 3.2 程序设计具体步骤 2 四 系统调试与结果 8 五 主要元器件与设备 8 六 课程设计体会与建议 8 6.1 设计体会 8 6.2 设...