- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
移位寄存器,Verilog
对读者的假设
已经掌握:
可编程逻辑基础
Verilog HDL基础
使用Verilog设计的Quartus II入门指南
使用Verilog设计的ModelSIm入门指南
内容
free-running移位寄存器
自由运行移位寄存器,即在每一个时钟周期内,寄存器的内容会被左移或右移一位。该寄存器没有其他的控制信号。
代码1 free-running移位寄存器 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 module?free_run_shift_reg
# parameter?N 8 // global clock and asyn reset
??input?clk,
??input?rst_n,
??// serial I/O interface
??input?s_in,
??output?s_out
;
// signal declaration
reg?[N-1:0] r_reg;
wire?[N-1:0] r_next;
// body
// register
always@ posedge?clk, negedge?rst_n if !rst_n r_reg 0;
??else r_reg r_next;
// next-state logic
assign?r_next s_in, r_reg[N-1:1] ;
// output logic
assign?s_out r_reg[0];
endmodule 次态(next-state)逻辑是一位移位器,作用是将r_reg右移一个位置,然后在最高位(MSB)插入串型输入s_in。由于1位移位器仅需要重新连接输入和输出信号,因此不需要任何实际的逻辑电路。
Universa shift register
通用移位寄存器可以载入并行数据,然后左移或者右移,抑或保持原有状态。它可实现并串操作(先载入并行输入,然后移位输出),或者串并转换(先移位输入,然后一并输出)。
代码2 万用移位寄存器 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 module?univ_shift_reg
# parameter?N 8 // global clk and asyn reset
??input?clk,
??input?rst_n,
??// serial I/O interface
??input?[1:0] ctrl,
??input?[N-1:0] d,
??output?[N-1:0] q ;?
// signal declaration
reg?[N-1:0] r_reg, r_next;
// body
// register
always@ posedge?clk, negedge?rst_n if !rst_n r_reg 0;
??else r_reg r_next;
// next-state logic
always@*
??case ctrl 2b00: r_next r_reg; // no operation 2b01: r_next r_reg[N-2:0], d[0] ;? // shift left 2b10: r_next d[N-1], r_reg[N-1:1] ;// shift right defaut: r_next d;
??endcase
// output logic
assign?q r_reg;
endmodule 次态逻辑使用了一个4选1的多路选择器来选择寄存器所需的次态值。注意:d的最低位和最高位(d[0]和d[N-1)被用作左移操作和右移操作的串型输入。
文档评论(0)