用Verilog写一个74LS160
5-10 用Verilog設(shè)計(jì)一個(gè)功能類似74ls160的計(jì)數(shù)器。
(1)解題思路
設(shè)計(jì)一個(gè)74ls160,需要知道它的功能表,以及原理圖
?
?
(2)核心模塊代碼
module fidv1 (rd,clk,et,load,datain,dataout,cout,ep);
input rd,et,load,clk,ep;
input [3:0] datain;
output [3:0] dataout ;
output cout;
reg cout;
reg [3:0] q1;
wire rd;
always @ (posedge clk or negedge rd)
if (rd==0) begin q1<=4'd0; end//rd=0時(shí)清零
else begin
if(clk==1&load==0) q1=datain;
else if(clk==1&load==1)
begin
if(ep==1&et==1&q1<4'd10) //開始計(jì)數(shù)
begin q1=q1+1;cout=0;
end
else if((ep&et)==0) begin q1=q1;cout=0;end//保持不變
else if(q1==4'd10) cout=1;//進(jìn)位輸出
end
end
assign dataout =q1;
endmodule
(3)測試模塊代碼
`timescale 1 ps/ 1 ps
module fidv1_ll();
// constants ??????????????????????????????????????????
// general purpose registers
reg eachvec;
// test vector input registers
reg clk;
reg [3:0] datain;
reg ep;
reg et;
reg load;
reg rd;
// wires ??????????????????????????????????????????????
wire cout;
wire [3:0] ?dataout;
?
// assign statements (if any) ?????????????????????????
fidv1 i1 (
// port map - connection between master ports and signals/registers ??
.clk(clk),
.cout(cout),
.datain(datain),
.dataout(dataout),
.ep(ep),
.et(et),
.load(load),
.rd(rd)
);
always ??#2 clk=~clk;
initial ???????????????????????????????????????????????
begin ?????????????????????????????????????????????????
#0 clk=0;
#0 rd=1;
#0 datain=4'd2;
#2 load=0;
#2 ep=1;
#0 et=1;
#12 load=1;
#16 ep=0;
#0 et=0;
#8 rd=0;
#2 rd=1;
#6 datain=4'd3;
#5 load=0;
???????????????????????????????????????
$display("dataout=%d,datain=%d",dataout,datain); ?
#2 $stop; ????????????????????
end ???????????????????????????????????????????????????
??????????????????????????????????????????
endmodule
(4)RTL View的網(wǎng)表圖
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/0001lizhubo/p/10846885.html
總結(jié)
以上是生活随笔為你收集整理的用Verilog写一个74LS160的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SIKI学院:MySQL数据库从零到精通
- 下一篇: react中使用photoswipe