- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
verilog_并串转换
题目要求:实现8位的并行数据转换为串行的数据。
题目分析:并行转串行,只要把每个输入按从高到低的顺序输出即可。即每个时钟脉冲输出一个数据。但是下面的代码有一个的问题,不能解决在8为数据串行输出的过程当中如果又有一个并行的输入数据输入,没有做到缓冲处理。也许这个缓冲处理可以在调用此模块时在外部实现吧。
功能代码:
module para_to_serial_8bit(para_in,clock,reset,ser_out);
input [7:0] para_in;
input reset,clock;
output ser_out;
reg ser_out;
reg [7:0] data;
always@(posedge clock or negedge reset) begin
if(~reset) begin
ser_out = 1b0;
data = para_in;
end
else begin
data = {data[6:0],data[7]};
ser_out = data[7];
end
end
endmodule
测试代码:
module test_para_to_ser;
reg [7:0] para_in;
reg clock,reset;
wire out;
para_to_serial_8bit f1(.para_in(para_in),.clock(clock),.reset(reset),.ser_out(out));
initial
$monitor($time,in_8bit = %b,reset= %b,ser_out= %b,data=%b,para_in,reset,out,f1.data);
initial begin
clock = 1b0;
reset = 1b0;
#3 reset = 1b1;
#300 $stop;
end
initial
para_in = 8b1010_0100;
always
#5clock = ~clock;
endmodule
测试结果:
测试波形如下:
作业二
题目要求:实现8位的串行数据转换为并行的数据。
题目分析:8位串行数据转换为并行数据,需要一个模为8的计数器,当计到8个时钟脉冲时,把之前的8个数据全部输出,然后从新接收。
功能模块代码:
模8计数器:
module counter_mod_8(clock,reset,Q);
input clock; //posedge effective
input reset; // negedge effective
output [2:0] Q;
reg [2:0] Q;
always@(posedge clock or negedge reset) begin
if(~reset)
Q = 3d0;
else
Q = Q + 1;
end
endmodule
串转并模块:
module ser_to_par_8bit(ser_in,clk,rst,out);
input ser_in,clk,rst;
output [7:0] out;
wire [7:0] out;
reg [7:0] par_out;
wire [2:0] count;
counter_mod_8 f1(.clock(clk),.reset(rst),.Q(count));
always@(posedge clk or negedge rst) begin
if(~rst)
par_out = 8b0000_0000;
else begin
par_out = {par_out[6:0],ser_in};
end
end
assign out = (count == 7)? par_out : 8b0000_0000;
endmodule
测试模块代码:
module test_ser_par;
reg [7:0] data;
wire data_in;
reg clock, reset;
wire [7:0] out;
文档评论(0)