
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程序:序列检测器的设计【用串行和并行方式编写】等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)