verilog_并串转换.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

xjj2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档