/* 實(shí)驗(yàn)名稱:級(jí)聯(lián)計(jì)數(shù)器 * 程序功能: * 約定俗成:所有需要外部輸入的信號(hào)加入前綴"In_",所有需往外部輸出的信號(hào)加入前綴"Out_" */ module mytest(In_clk, In_cin, In_rst_n, Out_cout, Out_q); input In_clk; input In_cin; input In_rst_n; output Out_cout; output[11:0] Out_q; wire Out_line0; // 計(jì)數(shù)器0的Out_cout端與計(jì)數(shù)器1的Out_cout端鏈接 wire Out_line1; // 計(jì)數(shù)器1的Out_cout端與計(jì)數(shù)器2的Out_cout端鏈接 wire[3:0] q0, q1, q2; // 將三組4位信號(hào)合并成一組12位的信號(hào) assign Out_q = {q2, q1, q0}; my_Counter Conuter0( .In_clk(In_clk), .In_cin(In_cin), // 重點(diǎn) .In_rst_n(In_rst_n), .Out_cout(Out_line0), // 重點(diǎn) //.Out_q(Out_q[3:0]) // 方式1 .Out_q(q0) // 方式2 ); my_Counter Conuter1( .In_clk(In_clk), .In_cin(Out_line0), // 重點(diǎn) 這里來(lái)一次高電平意味這計(jì)數(shù)器0計(jì)滿 .In_rst_n(In_rst_n), .Out_cout(Out_line1), // 重點(diǎn) //.Out_q(Out_q[7:4]) // 方式1 .Out_q(q1) // 方式2 ); my_Counter Conuter2( .In_clk(In_clk), .In_cin(Out_line1), // 重點(diǎn) 這里來(lái)一次高電平意味這計(jì)數(shù)器1計(jì)滿 .In_rst_n(In_rst_n), .Out_cout(Out_cout), // 重點(diǎn) //.Out_q(Out_q[11:8]) // 方式1 .Out_q(q2) // 方式2 ); endmodule /* 實(shí)驗(yàn)名稱:計(jì)數(shù)器 * 程序功能: * 約定俗成:所有需要外部輸入的信號(hào)加入前綴"In_" * 所有需往外部輸出的信號(hào)加入前綴"Out_" */ module my_Counter(In_clk, In_cin, In_rst_n, Out_cout, Out_q); input In_clk; input In_cin; input In_rst_n; output reg Out_cout; output [3:0]Out_q; reg[3:0] cnt; // 存儲(chǔ)計(jì)數(shù)值 // 捕獲 In_clk 上升沿,捕獲 In_rst_n 下降沿 // 計(jì)數(shù)程序塊 always@(posedge In_clk or negedge In_rst_n) if(1'b0 == In_rst_n) // 復(fù)位信號(hào)處理 計(jì)數(shù)歸零 cnt <= 4'd0; else if(1'b1 == In_cin) // In_cin 為高時(shí)開(kāi)始計(jì)數(shù) begin if(4'd9 == cnt) // cnt 等于 9 則歸零 cnt <=4'd0; else cnt <= cnt + 1'b1; // cnt 小于 9 則累加 end else ; /* 這段代碼會(huì)導(dǎo)致在級(jí)聯(lián)的時(shí)候每一級(jí) Out_cout 都會(huì)延遲一個(gè)時(shí)鐘周期 // 捕獲 In_clk 上升沿,捕獲 In_rst_n 下降沿 // 溢出輸出程序塊 always@(posedge In_clk or negedge In_rst_n) if(1'b0 == In_rst_n) // 復(fù)位信號(hào)處理 計(jì)數(shù)歸零 Out_cout <= 1'b0; else if(1'b1 == In_cin && 4'd9 == cnt) Out_cout <= 1'b1; // In_cin 為高并且同時(shí)上個(gè)計(jì)數(shù)器計(jì)數(shù)到9則輸出1 else Out_cout <= 1'b0; // 反之輸出0 */ // 修改如下 assign Out_cout = (1'b1 == In_cin && 4'd9 == cnt); assign Out_q = cnt; endmodule |