求大神用verilog HDL编写程序 :

求大神用verilog HDL编写程序 :,第1张

module canlender(a,b,option1,option2,option3,option4,led_result)

inpput [9:0] a

input [9:0] b//以1023以内的加减乘除举例

input option1,option2,option3,option4//四个按键,低电有效

//数字也不是这么表达的,而是每个按键对应一个数字,后一个按下前一个还要个位变十位

//为了简化,这么写的。你自己要想明白。可综合计算器程序也不是几十行就能描述的

output led_result//显示屏上的led显示数字,只显示结果

//每一步按下数字按理也要显示,这里不赘述了

reg[19:0] result

reg a_r,b_r//锁存两个 *** 作数

reg option1_r,option2_r,option3_r,option4_r//锁存 *** 作运算,防止手指抬起时复位”1“

always

begin

a_r=a

b_r=b

end

always @(a or b or option) //如果任何一个键值按下。

begin

if(!option1_r) ///如果加法运算

result=a_r+b_r

。。。

。。。

assign led_result=result//这句是错的。只是为了直观表达连续赋值语句在led那里显示

....

endmodule

直接用一个6位宽度的移位寄存器,新来数据移位一次,每次都检查移位寄存器中是否为你设置的串行码,即可:

reg [5:0] buf

always@(posedge clk)

begin

buf <= {buf[5:1],data_input}

beep_output <= (buf==6'b??????)?1'b1:1'b0

end

// 假设fpga的时钟输入频率是20MHz

// 假设蜂鸣器给'1'会响

module f2s

(

input clk,

input rst_n,

output reg f_out

)

parameter T2S = 26'd39999999

reg [25:0] cnt_2s

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)

begin

cnt_2s <= 26'd0

f_out <= 1'b0

end

else if(cnt_2s == T2S)

begin

cnt_2s <= 26'd0

f_out <= 1'b1

end

else

cnt_2s <= cnt_2s + 1'b1

end

endmodule


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12016299.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存