求大神用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

测试就是往DUT接口上加激励,通过DUT的输出判断是否正确。

对应到你的模块就是

input iclk_50;

input [7:0] keyin;

这两个input,时钟端口就给一个时钟

keyin给独热码0000000,,0000001,00000101000000就可以了

不知道你需不需要判断buzzout输出是否正确,需要的话还要更麻烦些

你 所谓的并行,是不是说将一串8位二进制码,如上图中x输入转换为并行

然后判断输入x是否等于预置值1010_1101?

还是题目中键4、3 并行输入信号•键 1、2 预置数据

每次并行检测2位,比如判断x输入两位是否等于10,后两位等于10,再两位等于11,最后两位等于01?

如果是这样,可以将x串行输入,进行个串并转换,例如用一个寄存器reg1[1:0]保存其值。

always @ (posedge clk or negedge rst)

if(!rst)

reg1 <= 2'h0;

else

reg1 <= {x, reg1[1]};

然后对比reg1值是否等于预置值。

仅供参考,谢谢

module(

Sys_Clk_40M, //40M

Sys_Rst_n, //系统复位信号

StartSig,

OutPutSig

);

input wire Sys_Clk_40M;

input wire Sys_Rst_n;

input wire StartSig,

output wire OutPutSig;

reg OutPutSigTemp;

reg StartDlySig1;

reg StartDlySig2;

wire StartOkSig2;

reg [15:0]conter1ms;

/消除信号毛刺/

always @(posedge Sys_Clk_40M or negdge Sys_Rst_n) begin

if(!Sys_Rst_n) begin

StartDlySig1<=1'b0;

StartDlySig2<=1'b0;

end

else begin

StartDlySig2<=StartDlySig1;

StartDlySig1<=StartSig;

end

end

/得到start上升沿确认信号/

assign StartOkSig2=(~StartDlySig2) && StartDlySig1 ;

/分频,得到1ms时间/

always @(posedge Sys_Clk_40M or negdge Sys_Rst_n) begin

if(!Sys_Rst_n) begin

conter1ms<=1'b0;

end

else begin

if(StartOkSig2==1)

conter1ms<=16'd40000;

else if(conter1ms>1'b1)

conter1ms<=conter1ms - 1'b1;

else

conter1ms<=1'b0;

end

end

/输出时间为1ms的高电平/

always @(posedge Sys_Clk_40M or negdge Sys_Rst_n) begin

if(!Sys_Rst_n) begin

OutPutSigTemp<=1'b0;

end

else begin

if(conter1ms>1'b1 && conter1ms<=16'd40000)

OutPutSigTemp<=1'b1;

else

OutPutSigTemp<=1'b0;

end

end

assign OutPutSig=OutPutSigTemp;

//

endmodule

//自己再调试一下,我只是写出来了,没有调试,但是大体框架是对的。可能会修改较小的地方。

以上就是关于求大神用verilog HDL编写程序 :全部的内容,包括:求大神用verilog HDL编写程序 :、求教用Verilog写testbench测试文件、verilog HDL程序:序列检测器的设计【用串行和并行方式编写】等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/10164028.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存